home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 2 / Atari Mega Archive CD - Volume 2.iso / 8bit / sio2pc / sio2pc38.exe / README.TXT < prev    next >
Text File  |  1994-02-13  |  98KB  |  1,836 lines

  1. SIO2PC: An Atari to PC
  2.  
  3. Interface System 
  4.     
  5. by Nick Kennedy
  6.  
  7.     D I S C L A I M E R
  8.  
  9. I have tried to ensure that my software is free of harmful defects (bugs) 
  10. and of viruses.  However, either could slip through my defenses.  Use the 
  11. software at your own risk.  Similarly, I believe my hardware design to be 
  12. in accordance with good practice, and I have a number of satisfied users.  
  13. However, wiring errors, errors in my design, and configuration 
  14. differences are possible and I cannot guarantee that these problems will 
  15. not lead to damage to your equipment or software or other unforeseen 
  16. damages. Use at your own risk.  Furthermore, if you choose to construct 
  17. my interface yourself, you must be experienced with electronic building 
  18. techniques.  Even if you are experienced, you could burn or cut yourself 
  19. or experience other damage or injury, for which you must assume 
  20. responsibility.
  21.  
  22. I consider the SIO2PC system to be a service to the Atari user's 
  23. community. Although I accept shareware contributions, and do make a 
  24. charge for assembling interfaces or kits, I still consider my efforts to be a 
  25. hobby and a service.  IF YOU HAVE SENT ME ANY PAYMENT FOR 
  26. ANY SOFTWARE, KIT, OR ASSEMBLED INTERFACE AND DO 
  27. NOT WISH TO ASSUME FULL RESPONSIBILITY FOR USE OF 
  28. OR CONSTRUCTION OF THESE ITEMS, YOU MAY RETURN 
  29. THEM TO ME AND I WILL REFUND YOUR MONEY.  IF YOU 
  30. ARE CONSTRUCTING THE INTERFACE AND CANNOT VERIFY 
  31. THE ADEQUACY OF THE DESIGN ON YOUR OWN, SEEK THE 
  32. ADVICE OF ONE COMPETENT IN ELECTRONICS.  OTHERWISE, 
  33. DO NOT ATTEMPT TO BUILD AND USE THE INTERFACE.  
  34. DON'T USE THE SIO2PC ON COMPUTER SYSTEMS USED FOR 
  35. COMMERCIAL PURPOSES OR FOR CRITICAL APPLICATIONS.
  36.  
  37. INTRODUCTION    1
  38. FEATURES:    2
  39. HARDWARE REQUIREMENTS:    2
  40. HISTORY:    3
  41. SHAREWARE INFO:    3
  42. READ ALL ABOUT IT:    3
  43. TECHNICAL INFORMATION ON SIO2PC    4
  44. REMOTE CONTROL PROGRAM:    5
  45. FILE2PC PROGRAM:    5
  46. STRUCTURE OF AN SIO2PC ATARI DISK IMAGE:    6
  47. USING RAMDISKS:    7
  48. TIMING INFORMATION:    7
  49. DOUBLE DENSITY:    9
  50. FORMATS vs DISK SIZES:    9
  51. FILE ACCESS: How it works & tips on efficiency    11
  52. MORE DISK CONFIGURABILITY:    12
  53. SIMULATED DISKS:    14
  54. PRINT-THRU:    15
  55. UNINSTALL DISK:    17
  56. STATUS LINE INFO:    18
  57. PC MEMORY USAGE:    19
  58. DOS SHELL FEATURE:    19
  59. VIRUS DETECTION:    19
  60. REMOTE CONTROL PROGRAM USAGE    20
  61. MAKADISK.EXE    21
  62. FILE2PC USAGE INFORMATION    22
  63. FUTURE PLANS, CURRENT PRICING    23
  64. REVISION LOG:    25
  65. PROBLEM DIAGNOSIS QUESTIONS    33
  66. POSSIBLE PROBLEMS AND SOLUTIONS    33
  67. USER'S QUESTIONS    36
  68. WHO'S NICK KENNEDY?    39
  69. OTHER PROGRAMS    39
  70.  
  71.  
  72. INTRODUCTION
  73.  
  74. Greetings Atari and PC users! SIO2PC is now a "Shareware" product.  If 
  75. you know little or nothing about the system, let me give you a rundown. 
  76. A separate text file, SIOINSTR.TXT, gives more detailed information on 
  77. running the system and describes its features.
  78.  
  79. SIO2PC is a hardware interface and software utility package to allow 
  80. storage of your Atari files on your PC's hard and floppy disks, file 
  81. conversions in both directions, and Atari printer output redirection to your 
  82. PC's printer, screen, or file. 
  83.  
  84. FEATURES:
  85.  
  86. Create 1 to 4 virtual Atari disks on your PC.
  87.  
  88. Virtual disks can be ramdisks or physical file access disks; disk 
  89. images can be up to 65525 sectors in size.
  90.  
  91. Save Ramdisks to PC hard or floppy disks.
  92.  
  93. Boot from the PC. Real drive not needed to start-up.
  94.  
  95. Create Single or Double density ram-drives.
  96.  
  97. No special Atari software patches. Use your favorite DOS.
  98.  
  99. Almost twice as fast as an Atari 810 drive. 
  100.  
  101. Co-exists in the Atari daisy chain with "real" drives.
  102.  
  103. Software written in assembler: Compact and Fast.
  104.  
  105. Compatible all the way down to the hardware level - CIO, SIO, 
  106. even direct hardware calls to drives will work.
  107.  
  108. Print-Thru mode sends your Atari's printer bound output to your 
  109. PC's  Printer, Screen, or file.
  110.  
  111. File Conversion: Convert and transmit PC files to Atari, or Atari 
  112. files to PC files.
  113.  
  114. Won't endanger your PC's hard disk. Your Atari disk images are 
  115. stored as ordinary PC files. No direct sector writes used.
  116.  
  117. Status line shows you exactly what your Atari is telling your disk 
  118. drives: drive number, command, and sector number.
  119.  
  120. HARDWARE REQUIREMENTS:
  121.  
  122. SIO2PC connects any PC compatible computer to any of the Atari 8 bit 
  123. computers (400, 600, 800, 800XL 130XE).
  124.  
  125. The interface between your PC's serial port and your Atari's SIO port 
  126. requires a simple interface. It uses two IC's and a few capacitors and can 
  127. be built on a 2" X 3" prototype board. If you are handy with a soldering 
  128. iron, read the BUILD_IT.DOC file on your disk. It gives complete 
  129. instructions, including addresses of parts suppliers. If you wish, I'll build 
  130. one for you, or provide you a kit of all parts with drawings and detailed 
  131. instructions. See BUILD_IT.DOC.
  132.  
  133. HISTORY:
  134.  
  135.     SIO2PC has been over 3 years in the making. Before I got my PC, 
  136. I considered my alternatives for my trusty Atari 800. Should I invest in an 
  137. adapter and hard disk for the Atari? I realized that the huge PC market 
  138. made an entire PC with hard drive almost as cheap as adding a drive to 
  139. my Atari. So why not do both? The PC could store my Atari programs 
  140. (get rid of that huge pile of floppies), and I'd have a new computer to 
  141. boot! The project has worked out better than I could have imagined. The 
  142. PC is a great computer - in some areas. In areas where it is weak, the 
  143. Atari still shines. Curing the Atari's mass storage weakness makes it even 
  144. better.
  145.  
  146. SHAREWARE INFO:
  147.  
  148.     As you no doubt know, Shareware is a system which allows you 
  149. to receive freely distributed software, and pay for it if you find it useful. If 
  150. you build the interface and find that the system is useful, I request the 
  151. modest sum of $10 for the design and software. If you choose to buy the 
  152. kit or assembled interface from me, no additional payment for the 
  153. software is expected. Either way, registered users may upgrade to the 
  154. latest revision by sending a disk sized SASE and $5.00. Your suggestions 
  155. will be considered for future revisions. So far, I have always been able to 
  156. personally respond to questions and problem reports.
  157.  
  158. READ ALL ABOUT IT:
  159.  
  160.     Don't you hate to write off for a shareware program that looks 
  161. good in the ad, only to find an endless README file describing the 
  162. limitless complexities of the package? Now that I'm on the creating end of 
  163. that particular method of information overload, I can see how 
  164. documentation files just grow... But - SIO2PC is a simple menu driven 
  165. program which can, I believe, be mastered without instructions. So, skim 
  166. through the rest of this file and the other .DOC files for tidbits, and return 
  167. only if you have problems or specific questions after you get your system 
  168. going. Of course, if you decide to build it yourself, you will want to read 
  169. BUILD_IT.DOC carefully. Also, go ahead and run SIO2PC.COM and 
  170. play with the menu options a bit, even without the interface. It won't hurt 
  171. anything. Note: This DOC file gives some problem resolution 
  172. information, technical information, and more information on file transfer 
  173. features. For a more concise user's guide to the program, see the 
  174. SIOINSTR.DOC file.
  175.  
  176.     A NOTE ON A RELATED HARDWARE DEVELOPMENT
  177.  
  178. Recently, an SIO2PC user told me he was developing a hardware project 
  179. which would allow him to type on the PC and have the keystrokes 
  180. transmitted to the Atari via a PC parallel port and custom Atari interface.  
  181. The system also comminicated joystick positions, START, SELECT, 
  182. OPTION, and SYSTEM RESET button status to the Atari - AND 
  183. allowed turning the Atari on and off remotely, and turning the Atari's 
  184. cartridge on and off.  His idea was to tuck the Atari away, into a desk 
  185. drawer or something, and do everything from the PC's keyboard.  He 
  186. asked me to write to software for this project and integrate it into 
  187. SIO2PC, which I have done.  The hardware is more complicated than an 
  188. SIO2PC, having 8 or 10 chips and requiring internal installation in the 
  189. Atari.  If this sounds interesting to you, I'd be glad to send you the 
  190. schematic and a version of SIO2PC which includes the control functions 
  191. for this modification.  If you'd like to contact the designer of the interface, 
  192. he is Carl Mangaroni, 15764 Midwood Drive Suite 5, Granada Hills CA 
  193. 91344  phone 818-363-1037.
  194.  
  195.  
  196. TECHNICAL INFORMATION ON SIO2PC
  197.  
  198. SIO2PC is 100% written in PC assembly language. REMOTE.OBJ and 
  199. FILE2PC.OBJ are written in 6502 assembly language. MAKADISK.EXE 
  200. is written in 'C'.
  201.  
  202. SIO2PC recognizes the basic SIO bus commands: READ SECTOR, 
  203. WRITE SECTOR, PUT SECTOR, STATUS, FORMAT, FORMAT 
  204. 1050 1.5 DENSITY. 
  205.  
  206. Because it works at this elementary level, it should work with any DOS 
  207. and with non-DOS disk loader programs. You can also make boot disks 
  208. (without DOS) and boot them from the PC.
  209.  
  210. SIO2PC uses only MS-DOS calls to do file I/O on the PC. Because there 
  211. are no direct sector writes, etc., SIO2PC won't trash your PC disks. Just 
  212. use the right path/filename when doing writes.
  213.  
  214. SIO2PC uses file handles, so I assume it will require MSDOS or PCDOS 
  215. 2.0 or later.
  216.  
  217. SIO2PC redirects the timer 0 interrupt for it's timing purposes. This is the 
  218. timer which supplies the BIOS its "timer tick", 18 times per second, 55 
  219. milliseconds per tick. SIO2PC also directly reads the timer as it is 
  220. counting down in a routine for more fine timing (the microsecond level). 
  221. If your PC doesn't use the standard timer chip (or compatible) with 
  222. standard port addresses, there could be problems. Note: Most PC Clones 
  223. are HIGHLY hardware compatible.
  224.  
  225. SIO2PC gets the port address for the specified COM port from bios data 
  226. area words at 040:0000, 040:0002, 040:0004, 040:0006 for COM  1,2,3, 
  227. and 4. I've found out that the POST routine typically doesn't set up the 
  228. addresses for ports 3 & 4. Therefore, version 1.01 will use default port 
  229. addresses 03F8, 02F8, 03E8, 02E8 for COM 1 - 4 if it finds a zero in the 
  230. BIOS data area word. If you know your port addresses to be other than 
  231. this, a third option is now available. Use your computer's documentation 
  232. to find the base address, and use SIO2PC's  "E" command to enter the 
  233. addresses directly.
  234.  
  235. REMOTE CONTROL PROGRAM:
  236.  
  237. The Atari serial bus reserves device ID's 31 - 38 hex for disk drives 1 thru 
  238. 8. I have used ID #39h for the remote control function. When the 
  239. SIO2PC program finds this ID # in a command frame, along with a Write 
  240. Sector command, it expects to receive one sector (128 bytes) containing a 
  241. command string. It then acts on the string as 
  242. if it were a command tail from the DOS command line. Any error, or the 
  243. Atari EOL character, will terminate command processing and flush the 
  244. line of any further commands. It is best to end the string with a space as a 
  245. delimiter, especially if your command ends in a pathname, else your PC 
  246. may pause waiting for input or an ENTER keystroke. A REV 2.1 change 
  247. added this function to the REMOTE process: When DEVID = 039h and 
  248. DCOMND = 'R', the SIO2PC sends a 128 byte data frame to the Atari 
  249. containing the DISK status information string shown on the screen. The 
  250. string sent depends on the contents of DAUX1 which must contain 1 - 8 
  251. for disks 1 - 8. This function allows REMOTE.OBJ on the Atari to 
  252. update the user as to the status of the ramdisks, before and after the 
  253. execution of the remote function. In this way, the user can see if his 
  254. remote command went to error free completion. In some cases, the PC 
  255. may be busy carrying out the command when the data request is received. 
  256. For example a command to write a ramdisk out to a floppy disk may take 
  257. 10 seconds or so. Therefore, REMOTE.OBJ tries 3 times, pausing 4.25 
  258. seconds between retries, before giving up on getting the information. 
  259.  
  260. FILE2PC PROGRAM:
  261.  
  262. The FILE2PC program also uses its own bus ID as a trigger for the 
  263. FILE2PC program. ID# 03Ah puts the  program into File Transfer mode. 
  264. The Atari (running FILE2PC) always asks for Status of device 03Ah 
  265. before putting a sector. (Only Status and Write are recognized by device 
  266. 03Ah.) If the first status byte (of 4) is normal (010h), then the PC is ok 
  267. for the transfer mode. If it is 0FFh, then the Atari will abort because the 
  268. PC has encountered an error. The process works like this: The Atari gets 
  269. Status, then, if OK, it sends a sector to the PC. The PC assumes that this 
  270. sector contains the pathname of the destination file, terminated in an 
  271. ATASCII EOL. The Atari pauses 4 seconds while the PC attempts to 
  272. create the file. (Note, any existing file of the specified pathname will be 
  273. overwritten.) After the Atari gets another good status, it starts sending 
  274. sectors of file information. 
  275.  
  276. The AUX bytes, which usually carry  sector # information, communicate 
  277. the following to the PC: 
  278.  
  279. AUX1 = 0:    Full sector, 128 bytes AUX1 = 1:    Last sector, AUX2 
  280. contains the byte count
  281. AUX1 = 2:    Atari encountered an error, abort process.
  282.  
  283. As I said, the Atari asks the PC for Status after every write.
  284.  
  285.  
  286. STRUCTURE OF AN SIO2PC ATARI DISK IMAGE:
  287.  
  288. It's extremely simple. There is first a 16 byte header with the following 
  289. information:
  290.  
  291. WORD = special code* indicating this is an Atari disk file
  292. WORD = size of this disk image, in paragraphs (size/16)
  293. WORD = sector size. (128 or 256) bytes/sector
  294. WORD = high part of size, in paragraphs (added by REV 3.00)
  295. SPARES 8 (ten) unused (spare) header bytes (contain zeroes)
  296.  
  297. After the header comes the disk image. This is just a continuous string of 
  298. bytes, with the first 128 bytes being the contents of disk sector 1, the 
  299. second being sector 2, etc.
  300.  
  301. * The "code" is the 16 bit sum of the individual ASCII values of the string 
  302. of bytes: "NICKATARI". If you try to load a file without this first 
  303. WORD, you get a "THIS FILE IS NOT AN ATARI DISK FILE" error 
  304. message. Try it.
  305.  
  306. USING RAMDISKS:
  307.  
  308. SIO2PC uses, or can use, the PC's hard or floppy disks to store Atari disk 
  309. information. However, to give maximum speed, the disk information can 
  310. be buffered via a ramdisk set up in the PC's ram space. When the Atari 
  311. reads/writes its SIO2PC "disks", it is actually communicating with the 
  312. ramdisks in the PC's memory. The user can choose to load a ramdisk 
  313. image or save one back to physical disk at any time via menu selection.  
  314. For files too large to be installed as ramdisks, file access to the disk image 
  315. is used.
  316.  
  317. TIMING INFORMATION: 
  318.  
  319. The Atari SIO2PC bus protocol specifies minimum and maximum times 
  320. between Atari commands and disk drive's responses. The minimums give 
  321. the Atari time to get ready to take the data from the bus if it has to do 
  322. some other work in the interim. The maximums let the Atari decide that 
  323. the peripheral isn't ever going to answer and it will give a "time out" error. 
  324. I have found that the system is very flexible and forgiving. I have used 
  325. wide variations and still had a workable system. But for one guy (you 
  326. know who you are, Joe!) or maybe two, I've made this menu to allow you 
  327. to experiment with different values. The system goes through this little 
  328. dance of command - acknowledge - data - acknowledge - complete, etc 
  329. with timings in between. In addition to these times inside the bus frame, 
  330. I've made a couple more (normally zero) time delays available.
  331.  
  332. First: On a serial bus, data is normally sent continuously, with no time 
  333. (except start and stop bits) between bytes. Now you can experiment by 
  334. adding some time here. (My system slowed down but still ran normally.) 
  335.  
  336. Second: Some publications say that some UART (serial) chips can't stand 
  337. to be addressed as fast as some PC's are capable of addressing them. I 
  338. already had a bit of time delay in there, but now you can add some more. 
  339. The time delays work like this: Each unit is 850 nano-seconds which is 
  340. almost 1 micro-second. (Multiply units by .85 to get micro-sec.) 
  341. (Exception: the value for the printer delay is in 1/18ths of a second.) Also, 
  342. you must enter the units as a 4 digit hex number. Don't panic, it's easy. 
  343. Here are some conversions:
  344.  
  345.     DECIMAL        HEX
  346.  
  347.     0005            0005
  348.     0010            000A
  349.     0050            0032
  350.     0100            0064
  351.     0250            00FA
  352.     0500            01F4
  353.     0750            02EE
  354.     1000            03E8
  355.     2000            07D0
  356.  
  357. The timing menu gives default values you can use as a starting point. If 
  358. you want to see the menu updated with your choices, an item is available 
  359. from the menu (choose #8).
  360. One problem with the TIMINGS menu is that it can't be addressed from 
  361. the command line tail, so if your system does need non- standard timings, 
  362. you have to set them up manually, each time you run the program. Not 
  363. any more, Joe! Here's a procedure to permanantly alter your program:
  364.  
  365. This procedure uses DOS's little utility "DEBUG," because everyone has 
  366. it. But you could use NORTON or similar if you want. I moved the 
  367. timing values to the front of the program and put an ASCII string in front 
  368. of it to make it easy to spot. Try this:
  369.  
  370. Get into the directory containing SIO2PC.COM. On the DOS command 
  371. line, type DEBUG SIO2PC.COM <ENTER>. Now you see a hyphen, 
  372. which is the DEBUG prompt. Now, type D <ENTER>. A table of hex 
  373. numbers appears. On the left is the corresponding SEGMENT:OFFSET 
  374. address for the first entry of each line. On the right is the corresponding 
  375. ASCII (text) representation of the hex bytes. You notice that my little flag, 
  376. "TIME DELAY VALUES: T1-T8, 2 BYTES PER ENTRY:" takes you 
  377. up to the line starting with offset :0130. That line contains the timing 
  378. values and looks like this:
  379.  
  380. ????:0130 ?? ?? ?? 64 00 B0 04 2C-01 etc.
  381. Here's the slightly tricky part: Each of those 2 digit hex numbers is a byte. 
  382. But each timing value is a WORD (2 bytes). And the PC stores words as 
  383. lower part first. So the values are: T1 = 0064, T2 = 04B0, T3 = 012C, 
  384. etc. 
  385.  
  386. The good part is, you don't need to worry about all this junk, we're gonna 
  387. fix it in a very easy way. If you have been following me and are now in 
  388. DEBUG, get out of it by typing Q <ENTER>. Now, I recommend that 
  389. you copy SIO2PC.COM onto a floppy because it's a little scary using 
  390. DEBUG to write to one's hard disk. Ok, you've done that and you have 
  391. the floppy in drive A:. Get into A: by typing A: <ENTER>. Now, type 
  392. DEBUG SIO2PC.COM <ENTER>. Give the "GO" (run) command by 
  393. typing G <ENTER>. SIO2PC runs from the floppy. First give it a port 
  394. number, then go to the "A" menu and change the timings values to those 
  395. you have found to work on your system. Now, leave the timings menu 
  396. and QUIT SIO2PC. You will see by the hyphen that you are back in 
  397. DEBUG. Type W <ENTER> and the program will be written back to the 
  398. disk file. Quit DEBUG with Q <ENTER>. Now run SIO2PC without 
  399. DEBUG, and call up the timings menu again. You will see that the 
  400. DEFAULT column stayed the same but the CURRENT values are now 
  401. permanently altered. Hey, I didn't know that DEBUG could be so useful, 
  402. did you?  NOTE: You should get a message saying program changed, 
  403. possible virus.  Just choose to write a new CRC and the program will be 
  404. fixed.
  405.  
  406. DOUBLE DENSITY: 
  407. The Atari expects the first 3 sectors on a disk to be single density. This is 
  408. necessary if you are to be able to boot from the disk. SIO2PC uses this 
  409. format for its double density mode.
  410.  
  411. FORMATS vs DISK SIZES:
  412.  
  413. I generally haven't restricted these things, but recommend the following: 
  414. Use 143K size only for "enhanced" or "1.5" or "DOS 2.5" density. The 
  415. 183K size was created for double density. A lot depends on your DOS. 
  416. Some DOS's can figure out the actual size of a disk, others may assume a 
  417. default. MYDOS is pretty smart. SPARTADOS probably is also. As of 
  418. REV 3.00, SIO2PC responds to "get" and "set" configuration commands, 
  419. and also allows you to select any size disk you want by specifying the 
  420. number of sectors.
  421.  
  422. As a result of changes made in REV 3.00 and beyond which allow 
  423. HUGE disk images, I now have additional information to present on disk 
  424. sizes:
  425.  
  426. File Access and BIG disks
  427.  
  428. The biggest change is the addition of file access to disk images.  Since this 
  429. type of access doesn't require setting up ramdisks, the disk image size isn't 
  430. limited by available ram.  You may choose the size of your disk images 
  431. using new size choice #5.  You specify the size in sectors.  If you're 
  432. interested in what this means in kilobytes, you can figure it from the fact 
  433. that a sector is 128 bytes for single density disks and 256 bytes for double 
  434. density.  Remember the status line field that shows 'W' if you've written to 
  435. a ramdisk but not saved it?  (And 'N' if the file has been saved.)  For 
  436. direct file access type disks, this field will contain an 'F'.
  437.  
  438. Note that you can force the system to use file access, even when there is 
  439. enough ram for a ramdisk.  You do this by following the filename by "/P" 
  440. for physical file access. Don't put a space between the filename and the 
  441. "/P".  The "P" will appear on your status line. (The "/" won't.)
  442.  
  443. Concerns about Speed
  444.  
  445. I was concerned that the overhead of using DOS and having physical disk 
  446. accesses might slow the system down.  On my two PCs, this hasn't been a 
  447. problem when using hard drives.  I use disk caches on both systems and 
  448. can't tell any difference between "ramdisk" and "file access" speed.  With 
  449. a floppy disk, my fears were justified.  Access was slow enough that the 
  450. Atari would time out and generate errors.  But, when I installed a disk 
  451. cache, floppy disk access worked fine too.  Some disk caches don't 
  452. support floppies.  Smartdrive (supplied with DOS 5 and WINDOWS) 
  453. doesn't.  I used one called LIGHTING.  It worked fine using conventional 
  454. memory while Smartdrive continued to run using extended memory.
  455.  
  456. Get/Set Configuration
  457.  
  458. Even after I first made some BIG disks, MYDOS 4.5 still couldn't figure 
  459. out that they were bigger than a standard 810 or 1050 disk.  The standard 
  460. Atari SIO protocol doesn't include a means for the drive to tell the Atari 
  461. what it is capable of (except in a very limited way).  I found that I had to 
  462. implement the extended SIO commands for Get and Set Configuration so 
  463. MYDOS would realize the actual size of the disk.  MYDOS does some of 
  464. this automatically (reads configuration on bootup).  But I found that I had 
  465. to explicitly do this in sequence so MYDOS would realize the disk size:
  466.  
  467. Create the new (blank) disk image.
  468.  
  469. Use the Set Configuration command, answering questions as 
  470. follows:  Configurable? Yes.  High Capacity? Yes.  Number of 
  471. Sector? xxxx.  Do this before formatting.
  472.  
  473. Format the new disk image.
  474.  
  475. Actually, SIO2PC doesn't do anything with the Set Configuration 
  476. command other than acknowledge it.  But it lets MYDOS know that the 
  477. disk is capable of more sectors than a standard disk.  The program WAS 
  478. going to also warn you if you tried to set the wrong density.  But it turns 
  479. out that MYDOS always tries to set high density when you answer "Yes" 
  480. to "High Capacity Drive?".  This doesn't cause a problem though: single 
  481. density still works OK.  I'm describing MYDOS because it's what I use.  
  482. YOUR Atari DOS may have its own quirks with regard to large drives. 
  483. MYDOS can become confused when you use the SIO2PC Swap Disk 
  484. I.D.s command.  MYDOS associates a certain disk number with a certain 
  485. configuration.  You may have to uninstall and reconfigure the drive with 
  486. MYDOS when you swap disks of different types.
  487.  
  488. Formatting
  489.  
  490. With regard to formatting, it can take a long time with a BIG disk image, 
  491. especially on a floppy.  SIO2PC sets a flag when you first create the disk, 
  492. to tell itself that the disk image is already blank.  So, when you format it, 
  493. the program doesn't bother clearing the disk.  This saves a lot of time.  
  494. After you write to the disk, the flag is cleared.  Then, formatting includes 
  495. clearing the entire disk image file.  This could cause the Atari to time out 
  496. and not realize the format was successful.  So you may want to avoid 
  497. formatting "used" disk images.  I can't think of a reason you'd want to.  
  498. (CREATING a new disk image can take a while too, but the Atari isn't 
  499. involved in this process, so it won't get impatient.)  I may improve the 
  500. program to speed up this process if it's a problem.  But creating new BIG 
  501. disks will probably be an infrequent operation for most of us.
  502.  
  503. *** NOTE: In a "rev 3.00 and 1/2" modification, I have taken a big step 
  504. toward curing the slow formatting problem.  Instead of writing blank 
  505. sectors one at a time, I now write zeroes in blocks of 4K at a time, 
  506. dividing the number of DOS calls by 32.  This only works if there is at 
  507. least 4K of free ram. Otherwise, formatting will still work slowly, as 
  508. described above. 
  509.  
  510. Note that you need to be a bit more careful when formatting file access 
  511. disks.  With ramdisks, you could always choose to not save the formatted 
  512. disk image, so your original was safe.  With file access, formatting 
  513. actually clears your disk image file.
  514.  
  515. Another addition with this revision is that you can now number your disks 
  516. as 1 - 8 instead of 1 - 4.
  517.  
  518. Incidentally, you may wonder why your old 92K and 143K disks are now 
  519. 90K and 140K.  This has to do with the difference between a kilobyte as 
  520. 1000 bytes and a kilobyte as 1024 (2^10) bytes.  Revision 3.00 divides 
  521. the disk size in bytes by 1024 to establish the disk size. 
  522.  
  523. FILE ACCESS: How it works & tips on efficiency
  524.  
  525. It's pretty simple.  MS-DOS maintains a pointer into open files which can 
  526. be set by the program. SIO2PC maintains a corresponding pointer to the 
  527. next Atari sector. When SIO2PC receives a read or write sector request 
  528. from the Atari, it calculates the file offset from the sector number.  It 
  529. compares this to its record of where the pointer is now. If they differ, it 
  530. asks DOS to point to the new location.  Then it asks DOS to read or write 
  531. 128 (or 256) bytes and increments its internal sector pointer by one, since 
  532. DOS's pointer will now be at the next 128 or 256 block of the file.  As 
  533. you can see, if the Atari asks for sectors sequentially the pointer 
  534. automatically moves along in step and no separate requests to reposition 
  535. the pointer are needed.  This is a good reason to try to keep your disk 
  536. images unfragmented.  Actually, it's possible to have things DOUBLY 
  537. fragmented: fragmented Atari disk images and fragmented PC disks.  To 
  538. avoid Atari fragmenting, you should first put files on the disk which you 
  539. won't be deleting or changing: DOS, games, application programs.  Last, 
  540. put on any stuff that will change: data files, text files, etc.  If you suspect 
  541. your disk is fragmented it's easy to undo.  Just do a file copy (*.*) from 
  542. the fragmented disk image to a newly created and formatted blank disk 
  543. image.
  544.  
  545. MORE DISK CONFIGURABILITY:
  546.  
  547. I've heard lots of reports about the inability to format certain disk image 
  548. sizes.  My adding the "get configuration" and "send configuration" 
  549. functions in Rev 3.00 in some cases seemed to make matters worse.
  550.  
  551. I'm now getting into an area where the specific DOS one uses makes a 
  552. difference.  So my treasured concept of "DOS independence" of SIO2PC 
  553. is going out the window.  The problem is this:  How can the system tell 
  554. the Atari exactly what size and type of disk it is emulating?  The 12 byte 
  555. configuration table exchanged via the GET/SEND CONFIGURATION 
  556. commands would seem to be the answer.  Unfortunately, both MYDOS 
  557. and SPARTADOS admit to ignoring most of the information exchanged.  
  558. The variables are:
  559.  
  560. SINGLE/DOUBLE DENSITY: 128 or 256 bytes/sector
  561. SINGLE/DOUBLE SIDED DISK
  562. NUMBER OF TRACKS/SIDE: TYP: 35, 40, 77, 80 expected
  563. NUMBER OF SECTORS/TRACK: TYP: 18 or 26 expected
  564.  
  565.  
  566. The MYDOS doc indicates that it likes to consider the disk to be one 
  567. huge track containing all the sectors.  This seems to work pretty well for 
  568. SIO2PC.
  569.  
  570. SPARTADOS evidently expects to receive information which matches its 
  571. expectations about certain combinations.  The sizes under the choice 
  572. 6/Other are intended to give SPARTADOS what it expects.  (As 
  573. standards, they are probably good for other DOSes too.)
  574.  
  575. One thing I've recently learned (I think it's true, anyway) is that 
  576. SPARTADOS consideres 26 sectors/track to be "1050 enhanced density" 
  577. in all cases except for 77 track drives which always have 26 sectors/track.
  578.  
  579. The bottom line is this:  Even though you can choose a disk image of any 
  580. size with the new SIO2PC option #5, you may have to adhere to certain 
  581. standard sizes when using SPARTADOS.  I've added a lookup table to 
  582. the program.  If the disk size matches a  certain standard, it reports a 
  583. combination of standard values to the Atari.  Otherwise, it uses the 
  584. MYDOS technique of 1 track holding all sectors.  Note that this routine 
  585. puts a tilde ( ~ ) in the ERR field of the status line if it finds a standard 
  586. size.  
  587.  
  588. Note that when you choose double density, the basic 1, 2, 3, & 4 choices 
  589. won't be seen as a standard size, but the equivalent chosen from sub 
  590. option 6/More WILL, for technical reasons too boring to go into here.  As 
  591. I've said, this usually doesn't matter, because most DOSses don't use the 
  592. GET/SEND configuration capabilities anyway.
  593.  
  594. You could compute some standard sizes like this:
  595.  
  596. Number of Sectors = (#TRACKS * #SIDES * # SECTORS/TRACK)
  597.  
  598. Size in Bytes = (Number of Sectors) * (#Bytes/Sector)
  599.  
  600. (For the Size in Bytes, subtract 384 for double density, because the first 3 
  601. sectors are always 128 bytes.)
  602.  
  603.  
  604. All YOU have to pay attention to is the density and the number of sectors. 
  605. SIO2PC will report the other numbers to the Atari. For MYDOS, just 
  606. randomly picking a number of sectors, without regard to standard sizes, 
  607. seems to work fine.
  608.  
  609. As I said before, the addition of the GET and SEND 
  610. CONFIGURATION info commands in some cases did more harm than 
  611. good.  For this reason, I've added yet another feature.  Now you can turn 
  612. on or off the configuration transfer function.  Since the main menu was 
  613. getting full, I added this to the TIMINGS menu.  Just hit 'A' to see the 
  614. timings menu.  Then hit 'C'.  The status of the installed disks will be 
  615. shown.  'Y' means they DO respond to configuration commands.  Enter 
  616. the disk's number to toggle its status with regard to this function.  I believe 
  617. this should only be necessary when getting ready to format, if at all.
  618.  
  619. I realize this discussion of REV 3.01 isn't exactly simple.  I hope you can 
  620. glean the necessary info from it.  It should be worth the effort to get 
  621. ULTRA SPEED going and to cure formatting problems.  Call or write if 
  622. you have problems, bugs, or suggestions.  I'd especially like any 
  623. SPARTADOS experts to tell me how it tells me to go back to high speed.
  624.  
  625. What is the '@' command SPARTA sends to device $4F?  Also any info 
  626. on how to get SPARTADOS to accept ANY size disk image would be 
  627. useful.
  628.  
  629. Rev. 3.05:
  630.  
  631. I added many more choices to the standard disk sizes for the "create disk" 
  632. option (option #6).  The new choices are those which correspond the 
  633. selections in the SPARTADOS format menu.  This is to make your 
  634. choices easier when using SPARTADOS. Internally, things still work the 
  635. same.  Again, with MYDOS, you shouldn't need to worry about certain 
  636. prescribed sizes.  Rev. 3.17 refined and corrected much of this.
  637.  
  638. SIMULATED DISKS:
  639.  
  640. The main event for 3.05 is the addition of what I call "simulated" disks.  
  641. This allows you to install any PC file as an Atari disk, without the 
  642. necessity of converting it to an Atari disk image..  This is more or less 
  643. intended to replace the much despised MAKADISK.EXE.  The features, 
  644. theory of operation, and limitations are described below:
  645.  
  646. The simulated disk is always single density (no size limit) and DOS 
  647. 2.0/2.5/MYDOS compatible.  It can't be written to, and can only be read 
  648. sequentially (no random access).  You CAN copy your executable files to 
  649. the PC with FILE2PC and load (run) them directly using this new 
  650. function.  If you ask for a directory, you will see the PC file's filename on 
  651. your Atari. (The length in sectors has no meaning.) Normally, after the 
  652. end of file has been reached, the system automatically unloads the disk.  If 
  653. you don't want this, use the /N (no space) option after the filename and 
  654. the file pointer will be reset to the start of the file after the end is reached - 
  655. making the file available to read again.  A new command has been added 
  656. to install the simulated disk - the "I" command.  It replaces the old "Z" 
  657. command (create double) which is now a separate choice under the 
  658. Create Disk option.
  659.  
  660. The new function works like this:  A simulated directory sector is given on 
  661. demand (#361). (When read, it causes the file pointer to be reset to the 
  662. start of the file.)  There is also a simulated sector #1 and sector #360 
  663. because some DOSes read these sectors to get information about the disk. 
  664. The simulated directory supplies a dummy sector pointer to sector 401 to 
  665. start the file. Each simulated data sector increments the sector number for 
  666. the "next sector" link.  Thats why the status line will show you reading 
  667. sector 401 thru 700. Then, it rolls down to number 401 again.  So if it 
  668. rolls over, you have read 300 (As of 3.10, trying to write doesn't return an 
  669. error to the Atari, it "pretends" to write the  sector.) Trying to read a 
  670. sector out of sequence doesn't return an error either.  The program 
  671. woould still just supply the next 125 file bytes if this happened.  Note: if 
  672. you need full functionality (READ, WRITE, RANDOM ACCESS) for 
  673. your Atari-file-on-a-PC, just copy it to an Atari (SIO2PC) disk image.
  674.  
  675. There are a lot of uses for this new feature.  You can download Atari files 
  676. to your PC and immediately load/run them on the Atari.  You could 
  677. program in 6502 on the PC using a cross assembler and load the files to 
  678. the Atari with no translation required. You may choose to keep some 
  679. favorite programs available under a "one Atari file per PC file" basis as an 
  680. alternative to having files under Atari disk images.
  681.  
  682. With rev. 3.11, boot files may also be simulated.  To use this feature, just 
  683. put /B after the file name.  You can combine /B and /N if you want.  The 
  684. program will send the next sequential 128 bytes to the Atari each time it 
  685. requests a sector, until the end of file is reached.
  686.  
  687.  
  688. PRINT-THRU:
  689.  
  690. The serial bus ID for the Atari printer is 040h. With PRINT-THRU in 
  691. effect, the program answers bus commands directed to the printer and 
  692. routes the data to the PC's printer or screen, as selected. Note that the 
  693. Atari uses an EOL character (09B hex) to mark the end of line, while the 
  694. PC uses carriage return and line feed (CR/LF) characters. So SIO2PC 
  695. gives you the option of making the translation. If you are printing text, 
  696. you should translate. For graphics, probably don't translate. You can also 
  697. strip the high bit if you want. The reason?  ASCII is a 7 bit text code. 
  698. Computers use 8 bit data. So, text with the high bit set is not defined 
  699. under ASCII, and different computers use it differently. On the Atari, text 
  700. with the high bit set is printed to the screen as inverse video. On the PC 
  701. you may get graphics characters. So, when printing text, you usually want 
  702. to clear the high bit. If you are printing 8 bit graphics data, you usually 
  703. don't want to 
  704. change it.
  705.  
  706. For revision 2.6, I've made some changes to the PRINT_THRU function. 
  707. The reasons, and other comments, are summarized below:
  708.  
  709. PRINTER NOTES, REV. 2.6
  710.  
  711. Due to reports of problems with the PRINT-THRU mode in certain 
  712. cases, I've reworked the print-thru routine.
  713.  
  714. My basis for this feature is to try to provide 100% compatibility with the 
  715. Atari 850 Printer/Serial interface, since it should be the standard for the 
  716. Atari. I went back and reread the functional description in my 850 
  717. manual. Here is a summary:
  718.  
  719. The Atari printer handler (in the computer's CIO, not in the 850) sends 
  720. fixed length records (40 characters) to the printer. If an EOL (RETURN 
  721. key) is encountered, it fills the rest of the buffer with spaces and sends it. 
  722. Note that software on the Atari doesn't necessarily have to use CIO. It can 
  723. send data directly to the serial port using SIO. Fixed length, 40 byte, 
  724. records are still necessary because the interface expects them. Now, when 
  725. the 850 receives a 40 byte record from the computer, it goes by these 
  726. rules:
  727.  
  728. 1) Send all bytes to the printer, as 8 bit data (no clearing the high bit) 
  729. except,
  730.  
  731. 2) If an EOL (9B hex) is encountered, convert it to a CR character, and 
  732. ignore the rest of the buffer (assumed to be extraneous spaces supplied by 
  733. CIO) except,
  734.  
  735. 3) If several consecutive EOLs are found, translate them all to alternating 
  736. CRs and spaces and send to the printer. NOTE: rev 2.8 took out the 
  737. spaces. My version was adding a space even if there was only one EOL, 
  738. causing alignment problems in the printout.
  739.  
  740. My interface was designed to provide several modes of operation, one of 
  741. which would emulate the 850 exactly. However, it wasn't doing some of 
  742. the things above. It didn't ignore characters after the EOL. It didn't 
  743. translate multiple EOLs to multiple CRs, only the first. It also translated 
  744. EOLs only to CR plus LF, not CR only. Now you have the option of 
  745. doing either.
  746.  
  747. What do the 850 rules above mean to the Atari printer programmer? 
  748. Well, as I see it, you can NEVER send a hex 9B to the printer, because 
  749. the conversion is irrevocably hard coded into the 850's ROM. Since 
  750. graphics data by nature can represent any dot pattern, it must include all 
  751. possible combination of bits, including $9B. This really isn't a huge 
  752. problem. The software would just have to detect EOLs and change one 
  753. bit. One dot's worth of error out of every 256 * 8, on average, won't hurt 
  754. anything. Another "cure" would be to have a printer which requires 7, not 
  755. 8, bit data. Since $9B has its high bit set, it would never be required to 
  756. send graphics data. (Just as it is not required to send standard ASCII text, 
  757. a 7 bit system.) 
  758.  
  759. All this info is presented for your amusement only. Hopefully, if my 
  760. emulation of the 850 is correct, your software will play just like it did on 
  761. your Atari printer. Of course, the Atari software will have to be 
  762. configured for the characteristics of your PCs printer, not your Atari's 
  763. printer, assuming they are different. 
  764. Rev 2.10 information: I added a value to the TIMINGS menu for the 
  765. printer. This is experimental at this time. One guy has a problem with the 
  766. system (PC) locking up after 3/4 page or so. I think maybe his printer isn't 
  767. handshaking properly, so I've added this timing value, to keep from 
  768. "overrunning" his printer. The normal value is 0. If you have problems, 
  769. add a little time. This value is in units of 1/18th of a second, so keep your 
  770. number small or you'll be in for a long wait. It is the value used between 
  771. sending of 40 byte records to the printer. Figure out about how long it 
  772. takes your printer to print a line and use about half this value in seconds. 
  773. So if your printer printed a line in 1 second, the value used would be 
  774. 0009 for 9/18 of a second. 
  775.  
  776. In 3.07, I added another translation to the PRINT-THRU function.  Now, 
  777. you can also change the ATASCII tab character to a standard ASCII TAB 
  778. in the PRINT-THRU process.  A 'T' on the PRINT-THRU status line 
  779. shows that you have chosen this option.
  780.  
  781. UNINSTALL DISK:
  782.  
  783. Why is it important to be able to do this?  Well, if you have already used 
  784. up all your memory in defined ramdisks, you can't overlay them with new 
  785. ones unless you remove the existing ones. This often would mean you had 
  786. to quit SIO2PC and restart it to get the configuration you wanted. Now, 
  787. you can delete ramdisks, and thanks to "garbage collection" performed by 
  788. the program, all data moves down to fill in the hole. So, you now have 
  789. free memory equal to the size of the deleted disk.  Uninstalling "file 
  790. access" disks doesn't free any ram, but it does free up one of your four 
  791. allowed virtual disks.
  792.  
  793. STATUS LINE INFO:
  794.  
  795. I've  created  a special status line, which is displayed  at  the bottom of the 
  796. screen, to help identify problems and to show  that the SIO2PC program 
  797. is actively doing something. It shows:
  798.  
  799. LOC: An identifier for the subroutine being executed.
  800.  
  801. CMND: SIO command from the Atari (Read, Write, etc.)
  802.  
  803. LAST: Command received previous to the one above.
  804.  
  805. DEV: Hex number for device being addressed by Atari. Note
  806. 31 - 38 = D1 - D8; 40 = Printer, 39 = Remote Control program
  807. 3A = FILE2PC program.    
  808.  
  809. COM: High/Low status of the Atari command line.
  810.  
  811. ERR: An error code returned by one of SIO2PC's routines.
  812. A character here doesn't necessarily mean a problem.  To aid 
  813. me in debugging.
  814.  
  815. SEC#: The sector # currently being written to or read from     by the 
  816. Atari.
  817.  
  818. RAM: The amount of RAM you have free for use.  It changes as 
  819. you install and uninstall ramdisks.
  820.  
  821. SPEED: N means normal speed 19.2K Baud, H means high speed,
  822. as in Sparta Dos' high speed I/O.
  823.  
  824. Note that the status line is updated even when the device being accessed 
  825. isn't an SIO2PC device.  This allows you to use SIO2PC to eavesdrop on 
  826. the SIO bus.
  827.  
  828. PC MEMORY USAGE:
  829.  
  830. The technically inclined may want to know how the program decides it 
  831. has the right to RAM for its ramdisks.  Well, I initially wrestled with this 
  832. one. I was trying to use a DOS function for "Allocate Memory," but I got 
  833. an error code meaning "no memory available."  This was crazy, because 
  834. SIO2PC is a very compact program. It turns out that when DOS runs a 
  835. COM file, it allocates ALL available memory to the program. This is 
  836. because DOS is intended to be a single tasking system.  I took advantage 
  837. of that fact. My program doesn't ask for memory, it just takes it, as 
  838. though it's the only player (which it should be). (Note: TSRs loaded 
  839. BEFORE SIO2PC are safe. SIO2PC only uses memory higher than that 
  840. allocated to itself.)  I use an internal DOS variable to decide if there is 
  841. enough memory to load/create the ramdisk you request.  
  842.  
  843. DOS SHELL FEATURE:
  844.  
  845. The main improvement added in rev. 3.08 is the ability to "shell out" to 
  846. DOS. What this means is, you return to the DOS command line prompt 
  847. "C:>" while SIO2PC is still resident.  Then you can run DOS commands 
  848. or programs, type EXIT, and be back in SIO2PC. You will of course be 
  849. subject to limitations on the amount of memory available with SIO2PC 
  850. and any ramdisks you have resident in memory. It's a good idea to avoid 
  851. messing with (deleting, renaming) any files that SIO2PC has open, such 
  852. as file access disks.  (SIO2PC doesn't leave files open when ramdisks are 
  853. loaded.)  In order to make this function fit on the menu, I had to dump a 
  854. function.  So, I took "R" off the screen. This is the function which 
  855. restores the screen (ESCAPE also works).  Note that "R" still works, you 
  856. just don't see it on the menu.  Due to the way memory is managed, you 
  857. shouldn't install any TSRs while in the DOS shell.
  858.  
  859. VIRUS DETECTION:
  860.  
  861. I got a rude introduction to the world of viruses a while back when I 
  862. found that my system had been attacked by a virus.  Since then, I've 
  863. added the byte count on the sign off message as a small first step. Rev. 
  864. 3.03 adds some more complex checks.  As soon as SIO2PC gets control, 
  865. it loads a second copy of itself into memory. Why?  Because the virus 
  866. may have already "done its thing" to the running copy, then fixed it to 
  867. look unchanged.  Anyway, SIO2PC loads a second copy, and checks to 
  868. make sure it isn't any bigger than its supposed to be. You get a message if 
  869. the size is wrong.  It then does a CRC calculation on the copy. If the CRC 
  870. result isn't as expected, you get another warning.  The program will still 
  871. run, however.
  872.  
  873. I translated the CRC calculation algorithm from C code in a book on 
  874. serial communications.  My version may not be exactly right, but it does 
  875. work.  I've tried toggling a single bit and got the warning.  Please note that 
  876. no system is foolproof.  Virus and counter-virus development is like the 
  877. arms race.
  878.  
  879. These additions don't seem to slow down program loading to any 
  880. appreciable extent, but for those of you who can't tolerate ANY 
  881. slowdown, I've included an override.  Just put /v or /V on your command 
  882. line somewhere after the program name and the virus checking will be 
  883. skipped.  (You should put the /v after the port # since the program comes 
  884. up expecting a port #.)
  885.  
  886. If you make changes to the program by interrupting it while it's running 
  887. (as I showed you how to do elsewhere), it may make the CRC wrong.  To 
  888. fix this, I've had the program print out the  calculated CRC with its sign 
  889. off message. The idea was that you could patch in the correct CRC value 
  890. with DEBUG.  However, with rev 3.08, that's been automated:
  891.  
  892. In 3.08, I changed the virus detection function (CRC check) so that the 
  893. program will offer to fix SIO2PC's internal CRC value to that just 
  894. calculated.  This is mainly for me, so newly assembled versions can have 
  895. their CRC set automatically.  If you get the warning and haven't changed 
  896. the program, better get out your virus checker and go over your files.  
  897. Delete SIO2PC and install a healthy copy. 
  898.  
  899. REMOTE CONTROL PROGRAM USAGE
  900.  
  901. This section is to tell you how to use the Atari program called 
  902. REMOTE.OBJ. This program is found on your disk image file, 
  903. ATARI.ATR.
  904.  
  905. The program allows you to send commands to SIO2PC from the Atari, 
  906. just as if you were typing them on the PC's keyboard. So, if your Atari 
  907. and PC are in different rooms (or something), you can swap ramdisks, 
  908. save and load, etc. without leaving the Atari. The file is fairly small, and if 
  909. you plan to make use of it, you should copy it to as many ramdisk images 
  910. as necessary to assure that it's accessible when you need it. 
  911.  
  912. When the program comes up, it shows a list of most of the SIO2PC 
  913. commands. If you want to study this list, hold down the START key, or 
  914. else it will scroll off after 3 seconds. The program next gets the status's of 
  915. the 4 disks from the PC and puts them on the screen. Now you are ready 
  916. to enter your command. Say you want to load a disk image from 
  917. A:\ATARI.ATR into ramdisk #4. Just type L4A:\ATARI.ATR and 
  918. RETURN. Note that some commands give you prompts which you must 
  919. answer in your command string, so anticipate them. For instance, if you 
  920. tell the PC to write back a file, you need to anticipate "USE EXISTING 
  921. FILESPEC?" and "FILE EXISTS, OK TO OVERWRITE?". Note that if 
  922. writing was successful, the "W" in the status line will have changed to "N" 
  923. after completion. One person was using REMOTE.OBJ on the Atari as 
  924. an AUTORUN.SYS, and feeding it with a batch script from 
  925. SPARTADOS to automate setup of his MIO ramdisks. Because he 
  926. couldn't simulate a character from the keyboard with SPARTADOS, my 
  927. "Run another command (Y/N)" left him stranded. For this reason, you 
  928. can now skip the command by starting your string with a space. When 
  929. REMOTE.OBJ sees the space, it will send the command to the PC, then 
  930. return to DOS automatically. 
  931.  
  932. Note: After transmitting a command, REMOTE.OBJ is allowing the PC a 
  933. certain number of seconds to complete it before giving up on getting the 
  934. ramdisk status. If you find that not enough time has been allowed, let me 
  935. know so I can add some more. (If you choose to skip the rerun prompt, 
  936. you won't be getting the ramdisk status after command completion.) 
  937.  
  938. MAKADISK.EXE
  939.  
  940. As I stated earlier, the need for MAKADISK.EXE has been pretty much 
  941. eliminated by the introduction of SIMULATED DISKS, which allow the 
  942. Atari to load in a file which is in native PC DOS file format.  However, 
  943. you may still find a reason to use MAKADISK.
  944.  
  945. The purpose of this program is to allow you to take a PC file and convert 
  946. it into an Atari ramdisk image so your Atari can read it. For instance, you 
  947. may have a modem on your PC only, and want to download Atari files. 
  948. Or, you may want to write program source code on your PC, because it 
  949. has an 80 column screen, and send it to the Atari for compiling.
  950.  
  951. At present, this program is basic - it allows you to put only one file to a 
  952. standard single density ramdisk image. You should then boot the Atari up 
  953. with SIO2PC and copy the file to a real disk or a "full featured" disk 
  954. image (one created by SIO2PC and your Atari DOS). Then you may as 
  955. well delete the MAKADISK created ramdisk image, it has served its 
  956. purpose. You can't write more files to it, the VTOC isn't correct. 
  957.  
  958. Note that another utility may be useful. I want to make one, but they are 
  959. available in public domain (PC Magazine's utilities disk has one). The 
  960. utility needed is to translate PC "end of line" codes (CR and LF) to the 
  961. Atari EOL code, which is hex 9B. If you are translating text files, you will 
  962. probably need this. Binary files (such as executable programs) shouldn't 
  963. generally be translated. 
  964. Note that MAKADISK asks for three things:
  965.  
  966. 1. The name (or pathname) of the PC file to be converted to Atari.
  967.  
  968. 2. The name of the PC's ramdisk image file. This is the name you will 
  969. give SIO2PC when you load the ramdisk image. I use an .ATR extension 
  970. for all my ramdisk images stored on the PC, but you can use what you 
  971. want. Note, MAKADISK doesn't tell you if there's already a file by that 
  972. name, so be careful, existing files will be overwritten.
  973.  
  974. 3. The name of the Atari version of the file. This is the name you will see 
  975. in the first position on your Atari screen when you ask DOS for a 
  976. directory.
  977.  
  978.  
  979. FILE2PC USAGE INFORMATION
  980.  
  981.  
  982. FILE2PC.OBJ is an Atari program found on your ATARI.ATR disk 
  983. image file located on the distribution diskette. If you run this program on 
  984. your Atari, it will cause SIO2PC to go into the file transfer mode. Just 
  985. follow the prompts on the Atari. You can read the technical details in the 
  986. TECHNICAL INFORMATION section if you're interested. This file 
  987. transfer function has been much requested. A lot of people seem to have 
  988. text files on their Atari's and want to transfer them to their PC's so they 
  989. can pick them up on the PC's word processor. I should tell you that the 
  990. usual warnings apply to this: Different word processors use different 
  991. formatting control codes. This is true even if you aren't going to a 
  992. different computer. Plus, the Atari has its own method of ending a line. It 
  993. uses an EOL (9B hex or 155 decimal) to tell its editor to drop the cursor 
  994. down one and move to the left margin. The PC, on the other hand, uses 
  995. two codes, CR & LF or carriage return and line feed. They are hex codes 
  996. 0D and 0A (decimal 13 and 10). There are utilities available which 
  997. translate codes like these. There was one called CHANGE on PC 
  998. Magazine's utilities disk. Unfortunately, it only works with files up to 40K 
  999. in size. I want to write one without this limit. A common denominator is 
  1000. the so called ASCII file, which is free of specific non-standard formatting 
  1001. commands. (Like this file.) If your Atari word processor will output a 
  1002. plain ASCII file, you may want to use the option before sending it to the 
  1003. PC. Some Atari programs will allow you to use an OS feature which lets 
  1004. you PRINT to a disk file. This should yield a plain ASCII file. Also, if 
  1005. you wanted to send it to your PC's printer, it should definitely be ready to 
  1006. go in this format. Anyway, you will probably want to use a filter program 
  1007. to change your 9Bh's to CR/LF's as a minimum. Note that 9Bh looks like 
  1008. a "cents" symbol on my PC. To see it, hold down ALT on the PC and 
  1009. type 155 on your numeric keypad.
  1010.  
  1011. Rev 2.3 note:  Now that the PRINT_THRU function allows you to 
  1012. "print" to a PC file, you have another method of transferring your Atari 
  1013. text files to PC files. And since the PRINT_THRU option has EOL to 
  1014. CR/LF and TAB conversion capabilities, it may be easier to use in some 
  1015. cases than FILE2PC. Remember, Atari DOS allows you to COPY a file 
  1016. to P:.
  1017.  
  1018. FUTURE PLANS, CURRENT PRICING
  1019.  
  1020. I now feel that SIO2PC is becoming a pretty mature program. However, 
  1021. there seems to be no limit to the number of enhancements one can dream 
  1022. up. I would like to take a stab at making the system capable of copying 
  1023. copy protected disks, with the ability to run them from SIO2PC storage 
  1024. without the original disks. I don't really see SIO2PC as some sort of copy 
  1025. protection cracker, but it is a pain for users to have this system and still 
  1026. have to rely on an Atari drive to run some of their software. I'm not sure 
  1027. how effective this system will be, because I'm not up on all copy 
  1028. protection techniques, but ... we'll see. 
  1029.  
  1030. I also hope to soon try to implement the Lightspeed I/O feature you 
  1031. Spartados/U.S. doubler users know and love.  DONE
  1032.  
  1033. It also occurs to me that some sort of Auto-compaction should be 
  1034. possible.  I could have the program keep track of the highest sector # 
  1035. written, and store only data to that point.  The empty portions of partially 
  1036. written disks, in general, wouldn't take up any disk space.  (DOSes 
  1037. generally use sectors sequentially, from low to high numbers.)
  1038.  
  1039.  
  1040. On the hardware side, I am still trying to simplify the assembly of the 
  1041. interface. It takes far too much time for the price charged to wire one up. 
  1042. So, I may soon make the DB-9 connector mount on the board and 
  1043. protrude thru the case, just like the ones on your PC do. This will save a 
  1044. lot of time stripping cables and wiring/assembling connectors. It will also 
  1045. mean that the interface will need a DB9S to DB9P or DB25S to DB9P 
  1046. cable to interconnect it to the PC.  I'll probably soon change the hardware 
  1047. so that the interface won't interfere with the SIO bus, even when the PC is 
  1048. turn off or not connected.
  1049.  
  1050. Please see BUILD_IT.DOC for the current prices. I had hoped (and still 
  1051. do) to hold the price as low as possible. Shortly after  receiving mention in 
  1052. Antic, I discovered a hardware problem which made it necessary to 
  1053. double the complexity and cost of the interface. SIO2PC is still just a 
  1054. hobby to me. I don't hope to recover my programming time (about 3 
  1055. years). But I seriously underestimated the time needed to assemble the 
  1056. interface, and do hope to get some reward for that time. (Since soldering 
  1057. isn't fun*, like programming.) Since I've sold only a few interfaces so far 
  1058. (about 50 as of Jan, 1992), I haven't had a custom circuit board built. 
  1059. Therefore, I have to hand wire the circuit on prototype boards, with quite 
  1060. a few jumpers required.  What's the bottom line of all this whining? I 
  1061. expect to have to either streamline assembly, raise my price, or both. I've 
  1062. also considered making the software "shareware" and publishing the 
  1063. schematic so users could pay me for the software and build their own 
  1064. interface from scratch or optionally order from me. Any advice?    ***  
  1065. DONE!!!
  1066.  
  1067.  
  1068. *Building one is fun. Building 10 or 20 is drudgery.
  1069.  
  1070.  
  1071. REVISION LOG:
  1072.  
  1073. 1.00:  First release
  1074.  
  1075. 1.01:  Now uses default addresses for COM 3 & 4 if BIOS data doesn't 
  1076. give addresses. Added option menu item "O", sub option "I" to allow 
  1077. ignoring CTS, "I" is now the default. If your status line will show "H" in 
  1078. the Atari field with the Atari "on", you can toggle this function. I believe 
  1079. the program functions fine while ignoring CTS, however, and may 
  1080. eventually delete the input entirely.
  1081.  
  1082. 1.02:  Changed the stack pointer to be 256 bytes at the program end. This 
  1083. means the program now only uses about 8K instead of a full 64K 
  1084. segment. Now, on my system with only DOS and a 10K Mouse driver 
  1085. installed, I can get 3 - 143K ramdisks (as usual) plus an extra 92K 
  1086. ramdisk. Killed a bug which caused the program to not recognize SIO bus 
  1087. command 022h, which is "format in DOS 2.5  1.5 density". Added clear 
  1088. of all disk info lines every update when I noticed that garbage sometimes 
  1089. remained from old filenames. This change is cosmetic only. Reduced the 
  1090. timeout value which the disk returns to SIO. This should reduce the time 
  1091. the atari waits when it is given an invalid format command. Changed the 
  1092. method used to put command codes to the status line. Now even invalid 
  1093. command codes will get listed, adding to ease of de-bugging. Got rid of a 
  1094. bug which could cause an invalid error report when writing a ramdisk 
  1095. back to an existing filename. Changed the method used to control the 
  1096. RTS line. Now the other lines of the MCR aren't affected. Note: These 
  1097. errors are primarily the result of switching from one assembler to another. 
  1098. (now on QUICK ASSEMBLER).
  1099.  
  1100. 1.03  4/3/90 Rewrote the routine for generating time delays. I had been 
  1101. reading the refresh timer. Now, I'm reading the system timer and using a 
  1102. different method which should be more reliable and compatible. 
  1103.  
  1104. 1.0  4/10/90 Added option "E" under Options. Now, the user can 
  1105. manually input port addresses.  The program also now puts to the screen 
  1106. the actual address used, whether manual or automatic.  Put the address in 
  1107. Hex format.  The standard addresses for COM 1, 2, 3, & 4 are: 03F8, 
  1108. 02F8, 03E8, & 02E8.
  1109.  
  1110. 1.05  Added some diagnostics. Now, on initialization of a PORT, the 
  1111. software reads back register LCR and gives a warning message if doesn't 
  1112. read as programmed. Then, the port is tested by sending a byte in the  
  1113. loopback mode. A warning is given if it fails. If these warnings occur, 
  1114. your program will probably fail. Either you have an incompatible COM 
  1115. PORT, or the program is using the wrong PORT addresses. Check your 
  1116. documentation and use "E", described above to set the PORT addresses. 
  1117. Also, the program now always sets up the UART chip (serial port chip) 
  1118. directly, instead of using BIOS. Also in this rev, the timer chip, timer #0, 
  1119. is now programmed in mode 2, count = 0 for a period of 55 milliseconds. 
  1120. This is the way it should already be, but now I'll take no chances. I 
  1121. replaced my "long time" timer routine, the one I use for keeping warning 
  1122. messages on the screen for 2 to 3 seconds. The old routine would 
  1123. occasionally lock up, or take far too long. Now, I have redirected the 
  1124. timer 0 interrupt for this purpose. Rev. 1.05 fixes a small bug which could 
  1125. result in extra characters on the filename line. It also fixes a bigger bug - 
  1126. the program used to write to a random address (Segment Register wasn't 
  1127. initialized) when it thought it was putting the default port address into the 
  1128. BIOS data area, after it had been found to contain 0. Now it just leaves 
  1129. the 0 alone. 
  1130.  
  1131. 1.06  Quite a few changes. Added the FILE2PC subroutine, which works 
  1132. with the FILE2PC.OBJ Atari program. This gives you the capability     of 
  1133. sending Atari files to the PC to become PC files, rather than Atari disk 
  1134. images. This means you can read the files with your PC's word processor. 
  1135. Rev. 1.06 also changed the logic on switching the PC's data out line to tri-
  1136. state (off line) level when it is not in use. Some people were having 
  1137. trouble with erratic and slow operation, and the switching of this line was 
  1138. believed to be causing spurious pulses. Now it only turns off when a non-
  1139. SIO2PC device is addressed, less that 1% as often as before. Another 
  1140. addition to rev 1.06 is the addition of double density.     Now you can 
  1141. choose 183K ramdisks and double density sectors. Note that sectors 1,2, 
  1142. & 3 are single density, so the ramdisk can be a bootable disk. Currently, 
  1143. you can only specify a double density ramdisk by choosing "Z" instead of 
  1144. "C" for the "Create Ramdisk" function. Then use a DOS that recognizes 
  1145. double density, such as MYDOS. I also made some changes to the 
  1146. LOOPBACK test performed on the UART (serial chip) upon 
  1147. initialization. I found I was getting occasional "failed loopback test" 
  1148. messages when everything was really OK. I did some fine tuning and  
  1149. haven't gotten a bogus message recently.  I also added a function ("R"), 
  1150. which allows you to restore a trashed screen. Despite my best efforts, 
  1151. DOS will sometimes manage to sneak in one of its messages, causing a 
  1152. scroll and messing up the screen. Use this feature to fix it. (As of rev 2.8, 
  1153. ESCAPE does the same thing.)
  1154.  
  1155. 1.07  I added a directory display function, under Options. You can just 
  1156. give it a filename, including wildcards to search the current directory, or a 
  1157. complete pathname to search other directories. Now, when you're in 
  1158. SIO2PC and can't remember the filenames of your disk images, you don't 
  1159. have to quit the program to find them. I name all my Atari disk images 
  1160. with the     extension ".ATR" and so I search for "*.ATR". Also in this 
  1161. release, when you choose "Quit", the program warns you if you have 
  1162. written to any ramdisks but not yet saved them back to disk.
  1163.  
  1164.     Rev. 1.07 was to include the "PRINT THRU" option, but it's not
  1165.     quite done. Rev. 1.08 will have it soon.
  1166.  
  1167. 1.08  PRINT-THRU mode incorporated. Now, you PC can serve as an 
  1168. Atari to printer interface. You can have your Atari's printer output go to 
  1169. either the PC's printer or screen. You can also choose  whether to convert 
  1170. EOL's to CR/LF. Also in this rev, I added an Author credits screen. This 
  1171. screen goes away as soon as you give the port #. I moved the "Restore 
  1172. Screen" function from the Options menu to the Main menu. After having 
  1173. Atari output printed to your screen just press 'R' to restore the menu.
  1174.  
  1175. 1.09  Added feature to allow choice of stripping high bit on PRINT-
  1176. THRU data. This way, Atari inverse video text will come out as normal 
  1177. text. (Without, it would print as garbage.)
  1178.  
  1179. 2.0  Added function to allow deletion of a ramdisk. This function fills    in 
  1180. the hole created in memory by the deletion  and allows the freed memory 
  1181. to be used in creating other ramdisks.
  1182.  
  1183. 2.1  Changed the Atari program REMOTE.OBJ and changed SIO2PC to 
  1184. correspond. REMOTE.OBJ now asks for ramdisk info from SIO2PC at 
  1185. program start and after each command. SIO2PC sends that info to the 
  1186. Atari. Now, the remote user can get a fair idea of whether his command 
  1187. was successful or not. Also, now a leading space in the command string 
  1188. will cause REMOTE.OBJ to go back to DOS after completion of the 
  1189. command without asking if the user wants to send another command 
  1190. string.
  1191.  
  1192. 2.2  Changed the point at which the program looks at the device number 
  1193. in the command frame and disables the data out line if a non-SIO2PC 
  1194. device is being addressed. This is in hopes of     curing an interference 
  1195. problem some users have experienced when using real drives and SIO2PC 
  1196. together. 08/05/90
  1197.  
  1198. 2.3    AARGH!!  Rev. 2.2 still didn't take care of the elusive "problem". 
  1199. So, this version adds a switch which allows the user to lock SIO2PC's 
  1200. data out line into the "enabled" state. This was  verified earlier to work. 
  1201. Also, I finally did away with the old CTS or "Atari" line, which didn't 
  1202. seem to have any advantage. The idea was to carry the 12 volt line from 
  1203. the Atari to the PC to tell the PC it was on. It turned out that some PC's 
  1204. didn't recognize it, or some Atari's didn't have the 12 volts out. But, 
  1205. anyway the program worked fine without it. Another big change is the 
  1206. redesign of the user interface screen. It has become obvious to me that the 
  1207. separate "Options" screen was cumbersome and unnecessary. So I've 
  1208. combined all choices onto one screen. This means there are some 
  1209. functional changes, for those of you using batch and remote script files. 
  1210. First, option "O" is no more. Also, the "D" display status line choice is 
  1211. now "T", toggle status line. Another enhancement added with this 
  1212. revision: Now, you have a  third option with PRINT_THRU: You can 
  1213. specify that the Atari's printer bound output be sent to a PC file.
  1214.  
  1215. Still another change is to the Status Line. Replacing the "Atari" line status 
  1216. is the DEVID identifier. This is the SIO bus ID of the device being 
  1217. addressed. Elsewhere in this README file are the ID's of various bus 
  1218. devices. Also, as of this revision, the program updates the Command and 
  1219. DEVID fields even when a non-SIO2PC device is being addressed. Now 
  1220. you can see what your Atari is telling other devices, if it's trying to address 
  1221. non existent devices, etc.
  1222.  
  1223. 2.4  Changed the directory print-out from 2 to 4 entries per line.  Now 
  1224. your directory can have more than 90 entries without scrolling off the 
  1225. screen. Wrote handlers for the Critical Error Vector and the Control - C 
  1226. vector. The Critical handler is the one which gives you the Abort, Retry, 
  1227. Fail message if your drive door is open, the printer is out of paper, etc. It 
  1228. turned out that this would let you bail out of the program without going 
  1229. through my normal "Quit" routine. This restores the timer interrupt, for 
  1230. one thing. Anyway, now you get plain English messages and can still bail 
  1231. out if you want, but won't lock up your computer anymore if you do! 
  1232. Also added some obscure functions to Print-Thru that used to work with 
  1233. the original Atari 40  column printer, the one that plugged right into the 
  1234. SIO port. I don't know if any software out there sends these commands or 
  1235. not. Also added the SHAREWARE message at the end of the program.
  1236.  
  1237. 2.5   Adding user command "A" to adjust timing values. Allows user to 
  1238. set critical time delays used in the bus data transfers, to try to iron out 
  1239. differences between different systems. This addition is menu choice "A" 
  1240. and adds the TIMING menu. This shouldn't be necessary in 99% of 
  1241. cases, but here it is in case. See the "timing" section or the TECHNICAL 
  1242. INFO part of this DOC for more info.
  1243.  
  1244. 2.6  Worked over the PRINT_THRU routine to make it more flexible and 
  1245. more compatible with the 850 interface. Also moved the default "timings" 
  1246. value to the front of the program to make it easier to find and change with 
  1247. DEBUG or NORTON's utilities.
  1248.  
  1249. 2.7  Changed the PRINT_THRU routine so it will detect a "disk full" 
  1250. error when printing to a file, alert the user, terminate the PRINT_THRU 
  1251. process. This need was pointed out in Bob Wooley's AIM review.
  1252.  
  1253. 2.8  Fixed a bad printer bug caused by rev 2.6 in which lock up of the PC 
  1254. would occur if you were converting EOL's to CR/LF's and an EOL 
  1255. occurred at byte 40 of the printer buffer. I also got rid of the space added 
  1256. after CR/LF because it was causing problems. Also fixed so the ESCAPE 
  1257. key works the same as 'R' to restore the screen. Most people jab the ESC 
  1258. key when they get confused.
  1259.  
  1260.  
  1261. 2.9  Did a little more work on the "disk full" problem so it gets addressed 
  1262. anytime you are writing to a disk: PRINT_THRU, FILE2PC, or WRITE 
  1263. DISK FILE.
  1264.  
  1265. 2.10  More work on Print-thru. Added more LOCATION and ERROR  
  1266. codes to help in trapping errors.  Also added a time value to the 
  1267. TIMINGS menu to be used when printing to a real printer. It causes a 
  1268. wait between records sent to the printer.
  1269.  
  1270. 2.11  Added a byte count to the sign off message so the user can check if 
  1271. a virus has changed the program size.
  1272.  
  1273. 2.12  Added directory function to extract the Atari disk directory from a 
  1274. disk image file.  Now working for Atari DOS 2 & 2.5 compatible DOSes 
  1275. only.
  1276.  
  1277.  
  1278. 3.00  Added "file access" disks.  Now the user can have disks up to 16 
  1279. megabytes in size.  Increased allowable disk numbers from "1 thru 4" to 
  1280. "1 thru 8".  Added the color interface screen and color coded key fields 
  1281. and statuses.  Added fields to show the status of the PRINT_THRU 
  1282. function.  Added support for "get configuration" and "set configuration" 
  1283. commands.  Added the "sector #" and "free ram" fields to the status line.  
  1284. Fixed the status line so it's updated even when not being displayed.  Fixed 
  1285. a bug which caused return of incorrect status for double density disk 
  1286. images.  Warns before uninstalling a ramdisk which hasn't been saved.  
  1287. Formatting now clears the disk image to zeroes so it can be compacted 
  1288. better.  Killed a small bug on the REMOTE CONTROL program which 
  1289. may have appended one spurious character onto the command string.  
  1290. Split source file into 3 parts.
  1291.  
  1292. 3.01  Corrected some bugs from 3.00;  Added ULTRA SPEED I/O 
  1293. (SPARTADOS compatible).  I don't have all the difficulties worked out 
  1294. yet, but it is working.  The bit rates available on the Atari don't exactly 
  1295. match those available on the PC, so I had to pick a rate where they were 
  1296. practically the same: 38 KB.  This isn't as fast as the US Doubler can go, 
  1297. but it IS twice as fast as SIO2PC usually goes.  A few cautions are in 
  1298. order.  I couldn't fully understand all the stuff SPARTA DOS is doing.  It 
  1299. goes to high speed, then back to regular, and again to high. I get lost 
  1300. somewhere in the middle as to what is the signal to go back to high speed.  
  1301. As a patch, I put in the "J" command, for Jump to Ultra-speed. It actully 
  1302. toggles between the two speeds. (There's also a new field on the status 
  1303. line for speed: "N" for normal, "H" for High.) We'll find other 
  1304. complications as we go along.  For instance, trying to mix high speed stuff 
  1305. with functions which work in regular speed (PRINT_THRU, REMOTE, 
  1306. FILE2PC) will probably cause problems. We should probably limit the 
  1307. high speed stuff to loading, saving, and copying files.  But that's most of 
  1308. what we do anyway, right? Also did a lot more work on disk 
  1309. configurations.  I'd especially like any SPARTADOS experts to tell me 
  1310. how it tells me to go back to high speed. What is the '@' command 
  1311. SPARTA sends to device $4F?  Also any info on how to get 
  1312. SPARTADOS to accept ANY size disk image would be useful.
  1313.  
  1314. 3.02  Fixed a bug which was keeping the DATA out line on too long.
  1315.  
  1316. 3.03  Added virus check routines for file length and CRC.  Fixed a bug in 
  1317. FILE2PC.OBJ.
  1318.  
  1319. 3.04   I did some work on the directory functions. First, a minor fix.  The 
  1320. separator between a filename and its extension was supposed be a period 
  1321. (.) for a normal file and a star (*) for a subdirectory. This logic was 
  1322. reversed until now. Second, I've added SPARTADOS awareness to the 
  1323. function which extracts directories from Atari disk images.  For the 
  1324. program to know that the file is a SPARTA image, its name must end in 
  1325. an 'S'.  I use an 'ATS' extension for SPARTA images and 'ATR' for 
  1326. others.  A nice feature I added for this function is the ability to 
  1327. automatically expand subdirectories in addition to the Main directory.  I 
  1328. don't even have this working for MYDOS yet.  You can view all your 
  1329. Atari files with a request to see '*.AT?' if you use a naming convention 
  1330. like mine. OK, SPARTADOS users, are you happy now? I'm also doing 
  1331. some hardware changes.  I'm now going to a hardware version which is 
  1332. simpler, but should work better.  It doesn't use Tri-state logic.  Instead, it 
  1333. uses an open collector type logic to keep from interfering with other bus 
  1334. devices.  This design should be better capable of not interferring when the 
  1335. PC is off.  Since there is no Tri-state switching, the RTS line is not used, 
  1336. and the "Lock Data Line" function has no meaning.  Also, the status of 
  1337. the command line to the PC is inverted.  This necessitated a change in 
  1338. software. For the new hardware, the revision number at the top of the 
  1339. screen ends in a lower case 'i'.  I'm putting this information out in case I 
  1340. get the wrong version to anyone.  It will ususlly work, but sputter along.  
  1341. Whichever version you have, just let me know if you want the other one 
  1342. and I'll send it.  I would send out both versions now, but there's not 
  1343. enough room on a 360K distribution disk. (Also, ACOMINIT.COM is 
  1344. not needed with the new hardware.) 
  1345.  
  1346. 3.0  I added many more choices to the standard disk sizes for the "create 
  1347. disk" option.  The new choices are those which correspond the selections 
  1348. in the SPARTADOS format menu.  This is to make your choices easier 
  1349. when using SPARTADOS.  Internally, things still work the same.  Again, 
  1350. with MYDOS, you shouldn't need to worry about certain prescribed sizes. 
  1351. I did a lot of tweaking on the "main loop" (the one which monitors the 
  1352. bus for commands and dispatches the various SIO command functions).  I 
  1353. think I found one error.  One user (at least) was having major problems 
  1354. with revision 3.03.
  1355.  
  1356. The main event for 3.05 is the addition of what I call "simulated" disks, 
  1357. described earlier.  I also added a feature to get rid of the character in the 
  1358. ERR field of the status line when you use the "R" command or just press 
  1359. ESCAPE. This gets you back to a clean slate.  To be honest, even I don't 
  1360. know why some of these errors occur, but most are harmless.  For 
  1361. instance, your Atari DOS may be polling non-existent devices to see 
  1362. what's there. There's another thing the "R"/ESC command does for you:  
  1363. It bugs some people that the cursor ends up at the right end of the screen 
  1364. after some functions are completed.  They think this means the system is 
  1365. "hung up."  The "restore screen" command will put the cursor  back on 
  1366. the left, where it belongs.
  1367.  
  1368. 3.07: I added another translation to the PRINT-THRU function.  Now, 
  1369. you can also change the ATASCII tab character to a standard ASCII TAB 
  1370. in the PRINT-THRU process.  A 'T' on the PRINT-THRU status line 
  1371. shows that you have chosen this option.
  1372.  
  1373. 3.08:  The main improvement added in rev. 3.08 is the ability to "shell 
  1374. out" to DOS. This is described in the Technical Notes section. Added 
  1375. automatic (user's choice) correction of the internal CRC if legitimate 
  1376. changes caused a false virus warning (The user must verify this.)
  1377.  
  1378. 3.09:  Fixed a small bug which caused numbers in the filenames of 
  1379. simulated disks show up as graphics symbols in the Atari directory of the 
  1380. disk.  It was in the "convert to uppercase" routine: numbers don't need 
  1381. converting!
  1382.  
  1383. 3.10:  Made some changes to the "simulated" disk function: First, it no 
  1384. longer returns an error (just an 'S' in the ERR field) if the Atari tries to 
  1385. write to the disk.  Second, it now gives the simulated disk a "normal" 
  1386. status - not "locked" and not "in use."  Why did I do such a crazy thing?  
  1387. Well, some programs (such as my assembler, AMAC) want to open the 
  1388. file for write access, even though they don't intend to write to it.  Don't 
  1389. ask me why.  Opening the file in this way includes writing to the directory 
  1390. sector.  It could be that others have encountered this problem.  Anyway, 
  1391. now I can write my source code on the PC, filter it through a utility to 
  1392. convert it from ASCII to ATASCII, and assemble my program without 
  1393. ever copying it to an Atari disk or disk image.  Another change is to the 
  1394. sector number reported by the simulated disk.  It's pretty boring and not 
  1395. very informative watching all those sector # 100s go by on the status line.  
  1396. So now, the program now starts with sector 401 and counts up to 700, 
  1397. then again cycles to 401.  (Note: it's still sending sequential data, it just 
  1398. reuses the sector number.  DOS isn't smart enough to realize it's seen the 
  1399. sector number before, and some DOSs might get confused by sector 
  1400. nunbers > 720.)  
  1401.  
  1402. 3.11 - More changes to simulated disks: now you can install a simulated 
  1403. BOOT disk, by using /B after the file name on the 'I' menu choice.  I also 
  1404. did a little human engineering on the virus/CRC warning message.  I want 
  1405. people to realize that  something's potentially not right.  So now the 
  1406. warning is in flashing green.  Also, to fix the CRC (after assuring oneself 
  1407. that there isn't really a virus at fault), the user must type 'OK' instead of 
  1408. just 'Y'.
  1409.  
  1410. 3.12  Found a bug in the extract Atari directory function which caused 
  1411. improper action on SPARTADOS files.  Also added an Escape Key 
  1412. bailout from that function.
  1413.  
  1414. 3.13  A user complained that he gets printer timeout errors  when  using 
  1415. PRINT-THRU, so I experimentally increased some timing values.
  1416.  
  1417. 3.14 - I found that the speed of "simulated" disk accesses  had  slowed  
  1418. for unknown reasons.  Turns out I had duplicated a variable name with a 
  1419. local code label, so a timing value was greatly increased.  Fixed it by 
  1420. assigning a new label in my source code.
  1421.  
  1422. 3.15 - Added screen blanking.  Press "B" to blank the screen and ESC to 
  1423. restore.  Note: didn't add this feature to the Menu.  I want to make it 
  1424. automatic in the future.
  1425.  
  1426. 3.16 - Worked on the GET_DIR and GET_DRIVE subroutines, to cure a 
  1427. problem resulting in an INT 024h hardware error on startup.  It seems 
  1428. that DOS function 019h (get default drive #) returns the number based on 
  1429. 0 = A, 1 = B, etc.  But function 047h askes for a drive number code 
  1430. based on 0 = default, 1 = A, etc.  This difference caused drive 2 (C from 
  1431. function 19) to translate to drive 2, B, for function 047h; and a hardware 
  1432. error resulted if no disk in drive B.
  1433.  
  1434. 3.17 - Fixed many inconsistencies and bugs and added enhancements in 
  1435. response to a letter from Dr. Terry Chamberlain of Cheshire, England.  
  1436. He sent me a one page letter of praise for SIO2PC plus a 16 page text file 
  1437. listing bugs and desired improvements.  The changes are briefly:
  1438.  
  1439. Lengthened bus timing values.
  1440.  
  1441. Major changes to standard disk formats:  What a hassle!  I can't believe 
  1442. that all these years I thought a 1050 enhanced disk had 1120 sectors (28 
  1443. sectors/track) and no one else straightened me out!  My main excuse is 
  1444. that I never had a 1050 drive until I was around the version 3.0 stage of 
  1445. SIO2PC.  Anyway, I have completely redone my option 6(More) 
  1446. selections to include all of what he gave me.  I also made choice 3 of the 
  1447. initial list be 133K instead of 143K to correctly give the 1050 drive 
  1448. standard size.  Through all of this I found one or two other minor bugs 
  1449. and fixed them.  I hope this makes formatting easier for SpartaDos users 
  1450. and users of other DOSes as well.
  1451.  
  1452. Fixed a minor irritant:  When you press ESC to abort you input under 
  1453. Create Disk option 5 (input # of sectors) you instead get a linefeed and a 
  1454. "/".  This caused me to rewrite my "line input" handler, so now backspace 
  1455. works as expected in this function and other functions requiring input as 
  1456. well.  And ESC will now get you out of sub-option C-5.
  1457.  
  1458. When using /P to force a file access disk, subsequent requests were also 
  1459. treated as if /P had been chosen.  Fixed that.  Hope I also fixed some 
  1460. other glitches in file access disk operation so it will be more robust.
  1461.  
  1462. Now when you shell out to DOS, it doesn't default to 
  1463. C:\COMMAND.COM for its comspec.  It gets the comspec from the 
  1464. environment string, which should make the DOS SHELL feature usable 
  1465. for more users.  For instance, if you boot from A: or if you use another 
  1466. command processor, like 4DOS.  
  1467.  
  1468. The Extract SpartaDos directory function was messed up!  It didn't get all 
  1469. files and didn't expand subdirectories.  This was a real shock after all the 
  1470. work I put in on this feature.  Anyway, now it's fixed.  
  1471.  
  1472. These fixes and enhancements should make SIO2PC work more smoothly 
  1473. for everyone.  Thanks to Terry for his careful research.
  1474.  
  1475.  
  1476.  
  1477. PROBLEM DIAGNOSIS QUESTIONS
  1478.  
  1479. If you have trouble, I would like some information about your system. 
  1480. (Actually, I'm interested even if you don't have problems. Please send 
  1481. your comments.)
  1482.  
  1483. What kind of Atari? 800? 400? XE? XL? 1200? 600?
  1484.  
  1485. What Atari DOS? What type of formatting?
  1486.  
  1487. What kind and class of PC? XT? AT? '386? Original PC? Clock Speed?
  1488.  
  1489. Has your port been verified functional with other equipment?
  1490.  
  1491. What version of PC/MS DOS?
  1492.  
  1493. What does the status line at the bottom of the program show?
  1494.  
  1495. How long does TESTIME1.EXE take to run? (Should be close to10 
  1496. seconds.)
  1497.  
  1498. Any detailed information from your PC's tech manual about your serial 
  1499. ports and port addresses in general will be useful.
  1500.  
  1501. If you only have problems part of the time, what specific steps lead to the 
  1502. problem?
  1503.  
  1504. Please read the REV_LOG and TECHINFO sections of this for some 
  1505. more information which may help with problems. Read also any other 
  1506. .DOC files you find on the disk - there are tidbits of information scattered 
  1507. through various files which may be of use to you.
  1508.  
  1509.  
  1510. POSSIBLE PROBLEMS AND SOLUTIONS
  1511.  
  1512. Can't address certain drives
  1513.  
  1514. If you are unable to address certain drives,  such as  3, 4, 5, 6, 7, 8 (error 
  1515. 160 results), it may be that your DOS isn't  set up to include these drives. 
  1516. On Atari DOS 2 and 2.5, you can  find out  by booting in BASIC and 
  1517. giving a PRINT PEEK (1802)  command. The resulting number is the 
  1518. sum of the following: 1 for drive  1; 2  for drive 2; 4 for drive 3, and 8 for 
  1519. drive 4. So if  you  get "3," your DOS is set up for drives 1 and 2 only. 
  1520. To fix your DOS, you  simply  execute a POKE 1802,15 command. 
  1521. Then go to  DOS  and execute  the "H" WRITE DOS FILES command. 
  1522. Finally, turn  off  the computer and reboot.
  1523.  
  1524. Another  error that has plagued me from time to time is  this:  I "create" a 
  1525. ramdisk, then try to write to it without formatting it first.  Remember, if 
  1526. you create a ramdisk from scratch, you  have to format it. If you load up a 
  1527. stored ramdisk, you don't have  to format (or create) the ramdisk.  
  1528. Another  problem which isn't the fault of SIO2PC, comes when  you try  
  1529. to format a 92K ramdisk with DOS 2.5's normal  command.  You must  
  1530. use  the "format single" command here.  The  normal  format command  
  1531. of  DOS 2.5 only works with the 143K ramdisks.  On  some format  
  1532. related  errors, the Atari will  retry  "forever"  before giving  up and 
  1533. reporting the error. So you may think  the  system has locked up.
  1534.  
  1535. Note that on the 64K ramdisk, the program doesn't report back  to the  
  1536. Atari  that  the full set of 720  sectors  isn't  available. You'll  get an error 
  1537. 138 on the Atari if you try to put too  much data to this ramdisk. A utility 
  1538. is needed to mark the unavailable sectors  as "used" on your DOS's 
  1539. VTOC. If this all sounds  pretty intimidating, you may want to steer clear 
  1540. of the 64K ramdisk. (As of rev 3.00, the program DOES report the 
  1541. number of sectors available - if the DOS is smart enough to ask.  But with 
  1542. some disk image configurations, it may now be MANDATORY to 
  1543. configure your Atari DOS to recognize the disk.)
  1544.  
  1545. Here's a problem I had recently (1993):  I was using SIO2PC, which had 
  1546. been working fine before, and it started sputtering along and returning 
  1547. errors (on the Atari) when disk transfers were attempted.  After much 
  1548. brainstorming and fearing a hardware problem, I found out that the 
  1549. problem stemmed from "shelling out" to DOS from WINDOWS.  
  1550. Evidently, WINDOWS keeps "checking up" on DOS programs to the 
  1551. extent that it can interfere with high speed data transfers.
  1552.  
  1553. Noise, especially from Printer:
  1554.  
  1555. One user told me that his SIO2PC was susceptible to noise pickup from 
  1556. power cords, etc. (I have been able to run 75' of unshielded cable near 
  1557. power cords, over air conditioning units, etc, without problems, so you 
  1558. never know.) Anyway, he said he wrapped the box in foil and fixed it. I 
  1559. don't know if I'd go that far, but if you have intermittent problems, you 
  1560. might look at the cable routing. Yet another potential pitfall: You will 
  1561. usually remember when you have a real disk installed, you must not have 
  1562. an SIO2PC ramdisk of the same number, since a collision will occur. But 
  1563. sometimes you (I) will boot up a DOS which automatically installs a 
  1564. ramdisk handler on the Atari, forgetting that there is an SIO2PC ramdisk 
  1565. of the same number. When I try to access this disk #, I get strange results 
  1566. not immediately identifiable as to the cause. So, if you use Atari ramdisks, 
  1567. watch out for this.
  1568.  
  1569. Along this same line: I just got a letter from a user who was having 
  1570. trouble with the PRINT_THRU function. It would stop printing at 
  1571. unpredictable places. Then he noticed that the Atari was plugged into a 
  1572. surge suppressor, but the PC and printer weren't. When he plugged those 
  1573. items into a surge suppressor, the problem was fixed. So this is a major 
  1574. Ah-Ha! for anyone having random problems in this area. Printers generate 
  1575. a lot of electrical noise. I never have this problem on my system, but no 
  1576. wonder: My Atari and PC aren't on the same desk, they are powered from 
  1577. separate wall receptacles, and each has its own surge/noise suppressor. 
  1578. Let me suggest a couple of other things: Make sure your SIO2PC cable 
  1579. and your printer cable are kept separate. If your printer and serial cables 
  1580. have thumbscrews, tighten them up. I noticed this made a big 
  1581. improvement on the amount of noise my computer outputs to my ham 
  1582. radio. 
  1583.  
  1584. If you can't get rid of the noise, here's another solution, but not quite as 
  1585. clean: Set up SIO2PC to capture the Atari's printout to a file. Then leave 
  1586. SIO2PC and use the PC DOS COPY command to copy the file to the 
  1587. printer (PRN). Use the MS DOS "binary switch" option, or your printer 
  1588. control codes won't make it thru the copy process.  Here's another reason 
  1589. to use the "binary switch" option, discovered recently.  A guy was using 
  1590. this method and it worked fine except that the process would stop short 
  1591. before the data was completely transferred to the printer.  When MSDOS 
  1592. is copying files and isn't in the binary mode (/B switch), it looks for the 
  1593. 1A hex character as an end of file marker.  If a 1A byte is in your printer 
  1594. data, the transfer will stop at that point unless you use the binary switch.
  1595.  
  1596.  
  1597.  
  1598. Lock Data Line
  1599.  
  1600. Rev. 2.3 added a switch (function "K") to allow locking the data out line 
  1601. into the enabled state. This is for a user or two who had a specific 
  1602. problem which occurred when the data line went to the inactive state 
  1603. automatically. You should leave this switch in the Auto state. Otherwise, 
  1604. when you try to address non-SIO2PC devices, interference will result. 
  1605. However, if you note that when you address an SIO2PC drive and 
  1606. experience hesitation, sputtering, etc., try locking the data line on and see 
  1607. if it helps. (I now believe the TIMINGS MENU modification is the real 
  1608. cure for this type problem.)
  1609.  
  1610. Copy protection problems
  1611.  
  1612. Some people have told me that some copy protected programs which 
  1613. have been "broken" will run from a real drive but not from SIO2PC. 
  1614. Recently, one guy told me of a solution: He uses the TIMINGS menu of 
  1615. SIO2PC to slow down SIO2PC's I/O rate so it looks like a real drive. 
  1616. Appapently, some protected programs time the "sector get" and "sector 
  1617. put" processes to make sure they aren't running out of a ram drive 
  1618. (indicating that the protection has been broken). Since SIO2PC is a small 
  1619. program, one could have customized versions which are slowed down just 
  1620. for use on these problem programs. (Elsewhere in this DOC is info on 
  1621. how to permanently alter SIO2PC's timings.)
  1622.  
  1623. Interference from real drive
  1624.  
  1625. In my operating instructions, I tell you to turn off your real drive #1 and 
  1626. then boot from the SIO2PC disk #1. I haven't heard any complaints about 
  1627. this, but I recently borrowed a 1050 drive, which, when I turned it off, 
  1628. interfered with the serial bus and I couldn't read the SIO2PC drive. The 
  1629. solution was to turn the front lever on the 1050 to the EJECT position but 
  1630. leave the 1050 on. Apparently this told the 1050 not to answer the call, 
  1631. which then went through to SIO2PC OK.
  1632.  
  1633. Extract Directory Note
  1634.  
  1635. Note that the Extract Atari Directory function can't work on disk images 
  1636. currently in use as "file access" disks on the system.  This is because 
  1637. SIO2PC already has these files open for read/write and can't open them 
  1638. again to extract the directory.
  1639.  
  1640. Status Line Note
  1641.  
  1642. You may notice that under certain conditions your status line is not being 
  1643. updated.  This occurs when you have PRINT_THRU enabled with the 
  1644. screen selected as the output device.  To keep the status field characters 
  1645. from messing up your screen print, the status line update is inhibited until 
  1646. you turn off PRINT_THRU.
  1647.  
  1648. USER'S QUESTIONS
  1649.  
  1650. 1) Does the program reformat my PC's hard disk?
  1651.  
  1652. No! Your Atari disk images are stored on your PC as ordinary PC files.
  1653.  
  1654. 2) Could I use the hardware part of the SIO2PC system as a general 
  1655. purpose RS-232 interface? Like, to connect my Atari to a modem?
  1656.  
  1657. Hmmm... This is a good question, and the answer is sort of, "yes and no."  
  1658. Electrically, yes you have a true RS-232 connection coming out of the 
  1659. interface. However, note the following:
  1660.  
  1661. RS-232 includes several handshaking lines in both directions. But, most 
  1662. communications setups only use a few, and optionally can be told by 
  1663. software to disregard those they do have. I've seen computer to computer 
  1664. PC data links that had just Data in, Data out, and ground (via RS232 
  1665. serial port). My system has one handshaking line from the Atari to the 
  1666. PC, the COMMAND line which goes to RI on the PC. You can often 
  1667. "dummy up" inputs to fool one end of a link into thinking the other end is 
  1668. saying, "ready." A null modem cable is usually made up this way.
  1669.  
  1670. Bit rate (BAUD) and software on the Atari end: On the Atari, the SIO 
  1671. subsystem of the OS always works at a fixed rate: 19.2 Kilo- baud, except 
  1672. for the cassette: 300 baud. Also, it uses a strict protocol to send data: 
  1673. command frame, acknowledge, data frame, acknowledge, complete. But 
  1674. if you want to write your own software (or you have some already 
  1675. written), you can directly program the Atari's POKEY chip (UART) to 
  1676. any baud you want, and you can directly put data into its transmitter for 
  1677. sending, and can directly read incoming data from the receiver. (My notes 
  1678. under ATARICOM.DOC talk about how I did this once.) When you do 
  1679. this, you are completely bypassing SIO and running the whole show 
  1680. yourself. You can also control the handshaking lines yourself. To get into 
  1681. something this serious, you need the Atari Technical User's Notes. It's fun 
  1682. to learn, but takes some time.
  1683.  
  1684. Actually, since writing the above response, I HAVE written a specialized 
  1685. terminal program for my Atari using SIO (no 850 interface) configured 
  1686. for 9600 baud and connected to a Packet Radio terminal controller which 
  1687. uses the RS-232 standard.
  1688.  
  1689. 3) How come SIO2PC is a dead end - no extra port for adding another 
  1690. device?
  1691.  
  1692. I'm finding out this bothers some people. I figured, you could alway make 
  1693. this the last device in your chain. But I guess other manufacturers figured 
  1694. the same. It would be vastly more complicated for  me to build a box with 
  1695. a receptacle or two for SIO in it. They generally come as PC board 
  1696. mounted connectors, not as "in line" types like the plug I do use. So my 
  1697. board would be much bigger, I would be hand cutting rectangular cutouts 
  1698. in the box, etc.  However, someone had a suggestion, if you are building 
  1699. your own: He said the "newer" cassette recorder (the 1010?) had two 
  1700. SIO2PC jacks in it. You could get a surplus 1010 junker for a few bucks, 
  1701. gut it except for the connectors, and build your SIO2PC in this box. 
  1702. Alternately, you could just buy a couple of the jacks from your friendly 
  1703. Atari parts supplier and design them onto your board.  
  1704.  
  1705. Here's another idea:  build the interface into your Atari. Mount a DB-9 in 
  1706. the Atari's case. (I've done this.)  Then, your SIO port would still be free, 
  1707. and you just use a standard serial cable to connect your Atari to any PC.  
  1708.  
  1709.  
  1710. 4)  Will SIO2PC run on an Atari ST running PC ditto?
  1711.  
  1712. From what I've heard so far, no. SIO2PC does a lot of direct to the chip 
  1713. I/O, bypassing both MS-DOS and the PC's built in BIOS routines. I 
  1714. suspect that PC ditto doesn't emulate the PC down to this level. However, 
  1715. if there are any ST experts out there who want to work with me on it, I 
  1716. think we could modify the program to make it work. I configure the serial 
  1717. chip (UART) directly because the PC BIOS doesn't have 19.2 kilobaud as 
  1718. an option, although the chip will do it. I input and output data from/to the 
  1719. UART directly for speed. I have also reprogramed the PC's timer chip 
  1720. and have a timer driven interrupt running. I think all this could be worked 
  1721. out if we had the right info. How about it, ST users?
  1722.  
  1723. 5) Will you give out your source code for SIO2PC?
  1724.  
  1725. I don't routinely give it out. But if you would like to have the source code 
  1726. just to see how it's done, or to make some modifications, or even to 
  1727. "borrow" the basic I/O routines for use in your own non-commercial 
  1728. programs - write and let me know. SIO2PC is written entirely in assembly 
  1729. language for the MICROSOFT QUICK ASSEMBLER.  I also have a 
  1730. version which will assemble under A86, the excellent shareware 
  1731. assembler.  
  1732.  
  1733. 6) How about a default path?
  1734.  
  1735. One person asked to be able to have a default path so he wouldn't have to 
  1736. tell SIO2PC where to find his disk images.  I usually run SIO2PC out of 
  1737. the directory where my files are stored, so I don't need to specify a path.  
  1738. However, I just recently realized that DOS has a command built 
  1739. (SUBST) in which allows you to specify a virtual "drive" letter for any 
  1740. path.  For instance, from the DOS prompt, type SUBST E: 
  1741. C:\ATARI\DISKS.  After this, you can substitute drive E: for the full 
  1742. pathname, even from within SIO2PC.  A pretty convenient feature.
  1743.  
  1744. 7) Direct access to hard disks / HUGE Atari disk images.
  1745.  
  1746. I am getting a lot of requests from people wanting to have HUGE Atari 
  1747. disk images and direct access to the PC's disks.  I'm opposed to using 
  1748. direct sector writes on PC disks. The possibility of inadvertent destruction 
  1749. of PC files is too great and I'm afraid of the risk.  However, I'm thinking 
  1750. of having random sized disk images stored as PC files which would not be 
  1751. moved into PC ram.  I would have to use MS DOS's file pointing features 
  1752. to read in the correct "sector" directly from the file.  The DOS overhead 
  1753. would slow things down a bit, but I have an idea that it wouldn't be too 
  1754. bad. **** DONE *** 
  1755.  
  1756. WHO'S NICK KENNEDY?
  1757.  
  1758. I'm an electrical engineer, but I don't work with computers professionally. 
  1759. That part is a hobby. I got the Atari 800 in 1982, mostly so I could play 
  1760. Asteriods. 
  1761.  
  1762. Data communications interests me. I have written a Morse code program 
  1763. to interface the Atari with my Ham Radio station. Later, as a sort of 
  1764. evolutionary forerunner to SIO2PC, I wrote programs linking my two 
  1765. Atari 800's together, first via their serial (SIO) ports, and later via their 
  1766. joystick ports. The Atari equipped with a disk drive would send files to 
  1767. the one without. 
  1768.  
  1769. I thoroughly enjoy programming in assembly language, and may attempt 
  1770. "C", if threatened at gunpoint.
  1771.  
  1772. To me, the hardest part of programming is finding a worthy cause. There 
  1773. are so many programs out there, commercial, free, and shareware - all 
  1774. good, that it's hard to find a niche that hasn't been filled. I think SIO2PC 
  1775. fits the bill.
  1776.  
  1777. As I've said before, I'm very interested in your comments, suggestions, 
  1778. questions, praise and condemnations. So, if you built it yourself and have 
  1779. a comment, let me hear from you, even if you weren't moved enough to 
  1780. pay a shareware fee. I won't harangue you about it.
  1781.  
  1782. Nick Kennedy
  1783.  
  1784.  
  1785. OTHER PROGRAMS
  1786.  
  1787. I thought I'd tell about other programs I've written, on the off chance 
  1788. someone may find one of them useful.  Everything I've done involves 
  1789. interfacing a computer to another computer or to other external devices.  
  1790. All of my programs address some oddball specific need I had at one time 
  1791. or other.  These programs fulfill a function, but some of them lack polish:
  1792.  
  1793. PINEWOOD.EXE - Written to time external events (in my case, 
  1794. pinewood derby cars) to millisecond accuracy.  You hook a START 
  1795. switch to one serial input line and STOP switches to two others. (Only 
  1796. one serial port is required.)  I used phototransistors for the stop switches.  
  1797. The program starts timing when the START switch changes state, gives 
  1798. the time that each car (event) activates its STOP switch, and proclaims the 
  1799. winner!
  1800.  
  1801. TIMER.COM - A variation on the above.  This timer just monitors one 
  1802. line.  It starts timing when the line changes state and stops when it returns 
  1803. to its resting state.  I used it to time a "one shot" device (a 555) to make 
  1804. sure it was giving exactly the 50 milliseconds I needed.  This program 
  1805. would probably be called an interval timer.
  1806.  
  1807. PACKET.OBJ - A packet radio controller for the Atari 800.  This version 
  1808. is specifically set up to send control strings to an MFJ-1278 controller.  
  1809. Note: this is a ham radio thing.  Essentially, this is a terminal program 
  1810. similar to what one uses with a modem.  It doesn't have advanced features 
  1811. such as file capture, etc.
  1812.  
  1813. EPROM.COM - Interested in burning your own EPROMs?  Make your 
  1814. own Atari cartridges?  I built Steve Ciarcia's Serial EPROM Programmer 
  1815. from the Circuit Cellar, volume VI book.  The companion BASIC 
  1816. controller program left much to be desired, so I wrote a faster and more 
  1817. flexible one in assembler.
  1818.  
  1819. FREQ.COM & SYNTH.OBJ - Another ham/experimenter thing.  This 
  1820. program - which I have written for the PC, the Atari 800, and for a 6502 
  1821. single board computer - is a controller for a Direct Digital Frequency 
  1822. Synthesizer.  The synthesizer works from 0 to about 7 MHz, and has 1 
  1823. hertz resolution.  The controller gives the many fancy features of modern 
  1824. ham transceivers:  split transmit/receive frequencies, memories, memory 
  1825. scan, band scan, etc.
  1826.  
  1827. In the "EXTRAS" directory of the distribution disk, I've already told you 
  1828. about my programs linking two Atari's, and about my ham program 
  1829. KEYER.OBJ - the morse code keyer program which took almost as much 
  1830. programming time as SIO2PC.
  1831.  
  1832. If any of these things meets a need, let me know.
  1833.   NOTE: SAVE THIS FILE AS PLAIN TEXT /W LINE BREAKS ... *.TXT, WITH MARGIN 
  1834. AT 4 7/8.
  1835.  
  1836.